Penggunaan modal windows dalam mode ini dilarang. Mengapa kesalahan "Penggunaan modal windows dalam mode ini dilarang" terjadi? Petunjuk untuk memperbaiki kesalahan untuk pengguna biasa

Di platform 1C versi 8.3, mode operasi program baru telah muncul - tanpa menggunakan modalitas. Lebih tepatnya, muncul 2 mode baru: tanpa menggunakan modalitas dan menggunakan modalitas, namun dengan peringatan. Dan mode operasi lama diindikasikan menggunakan modalitas.

Apa maksudnya semua ini? Di versi awal platform, kami menggunakan berbagai jendela modal dan tidak terlalu memikirkannya. Misalnya, Anda perlu menampilkan peringatan kepada pengguna, atau Anda perlu mengajukan pertanyaan, memasukkan nilai tertentu, atau memilih file. Ini semua adalah jendela modal.

Apa yang dimaksud dengan modal? Ini berarti bahwa ketika jendela ini dipanggil, jendela ini tumpang tindih dengan semua jendela lainnya, yaitu ditampilkan di bagian paling atas dan memblokir pekerjaan dengan jendela lain hingga pekerjaan dengan jendela ini selesai. Selain memblokir jendela, eksekusi kode berhenti tepat pada titik di mana jendela ini dipanggil dan eksekusi kode berlanjut hanya setelah jendela tersebut ditutup. Dari titik di mana eksekusi dihentikan. Saya akan mengilustrasikan panggilan ke jendela modal menggunakan contoh pemanggilan formulir pemilihan periode:

&Pada Klien

Pemrosesan Standar = Salah;




If Dialog.Edit() Then //Panggil formulir modal. Eksekusi kode akan dilanjutkan hanya setelah formulir ditutup.
Elements.Services.CurrentData.StartDate = Dialog.Period.StartDate;
Elements.Services.CurrentData.EndDate = Dialog.Period.EndDate;
berakhir jika;

Akhir Prosedur


Seperti yang bisa kita lihat, satu prosedur sudah cukup untuk memproses panggilan ke jendela modal pemilihan periode.

Mengapa modal windows buruk? Sekarang mari kita cari tahu mengapa 1C memutuskan untuk meninggalkan penggunaan modal windows. Pertama-tama, ini adalah konsekuensi dari fakta bahwa platform 1C dapat digunakan tidak hanya dalam bentuk biasanya - sebagai aplikasi desktop, tetapi juga dapat diluncurkan di browser dan dapat diluncurkan sebagai aplikasi seluler.

Masalah dengan browser adalah sebagai berikut. Modalitas jendela di dalamnya diimplementasikan menggunakan jendela browser pop-up terpisah. Mereka didukung oleh hampir semua browser, namun karena seringnya penggunaan jendela tersebut untuk iklan, hampir semua pengembang browser berjuang dengan mereka dan menonaktifkan penggunaan jendela tersebut secara default. Akibatnya, untuk memastikan bahwa pengguna 1C dapat bekerja di browser, perlu memaksanya untuk mengizinkan jendela ini, mendedikasikannya pada semua seluk-beluk pekerjaan 1C dan browser, dan umumnya membebani dia dengan hal-hal yang tidak perlu. informasi.

Nuansa tersendiri dengan browser untuk komputer tablet dan browser untuk ponsel. Dalam kebanyakan kasus, browser ini tidak mendukung pop-up. Antarmuka (monitor dan perangkat input) perangkat tersebut dengan jendela pop-up tidak kompatibel.

Dan terakhir, aplikasi mobile 1C juga tidak sepenuhnya bersahabat dengan modal windows.

Oleh karena itu kesimpulannya: Jangan gunakan jendela modal. Apa yang harus saya gunakan? Sebaliknya, Anda perlu menggunakan jendela yang sama, tetapi tanpa mode modalitas. Di platform baru, 1C juga telah mengembangkan mode ini untuk setiap jendela. Ini diimplementasikan sebagai metode terpisah untuk setiap dialog. Mode ini memungkinkan Anda membuka jendela, tetapi tidak menghentikan eksekusi kode program. Secara teknis, browser mengimplementasikan ini sebagai jendela semu yang muncul di dalam jendela induk, namun tumpang tindih. Fakta bahwa kode terus dieksekusi setelah jendela dibuka berarti Anda tidak akan dapat segera menerima nilai yang dipilih di dalamnya setelah kode untuk memanggil jendela. Mereka belum terpilih. Oleh karena itu, perolehan dan pemrosesan nilai-nilai ini dilakukan dalam prosedur terpisah, yang dipanggil saat jendela tersebut ditutup, dan prosedur ini ditentukan saat memanggil metode pembukaan jendela. Mari kita lihat jendela pemilihan periode yang sama sebagai contoh.

&Pada Klien
Prosedur LayananStartDateStartSelection(Elemen, SelectionData, StandardProcessing)

Pemrosesan Standar = Salah;

Dialog = NewEditingDialogStandardPeriod();
StandardPeriod = StandardPeriod Baru();

Tanggal Mulai = Item.Layanan.Data Saat Ini.Tanggal Mulai;
Tanggal Akhir = Item.Layanan.Data Saat Ini.Tanggal Akhir;

StandardPeriod.StartDate = Tanggal Mulai;
StandardPeriod.EndDate = Tanggal Akhir;
Dialog.Period = Periode Standar;

Deskripsi Peringatan = Deskripsi Pemberitahuan Baru("Pemrosesan Seleksi Periode", Formulir Ini);

Dialog.Show (Deskripsi Peringatan)

Akhir Prosedur

&Pada Klien
ProsedurPeriodePemrosesan Seleksi(Periode,Parameter) Ekspor

Jika Periode<>Tidak terdefinisi Lalu

Elements.Services.CurrentData.StartDate = Periode.StartDate;
Elements.Services.CurrentData.EndDate = Periode.EndDate;

berakhir jika;

Akhir Prosedur


Seperti yang bisa kita lihat, alih-alih Edit(), Show() dipanggil. Dan pemrosesan acara seleksi sudah di prosedur lain.

Jadi, kami menemukan cara melakukannya tanpa modalitas. Sekarang mari kita cari tahu mengapa kita memerlukan mode penggunaan modalitas dengan peringatan. Intinya, ini adalah rezim transisi. Ketika Anda belum berhasil mengubah seluruh konfigurasi Anda ke mode tanpa menggunakan modalitas, tetapi sudah mengupayakannya. Dan setiap kali Anda memanggil jendela modal, program akan memberi Anda peringatan bahwa tidak disarankan untuk memanggil jendela modal dalam mode ini.

Baiklah, mari tinggalkan modalitas dan kuasai teknologi baru untuk pekerjaan 1C di browser dan komputer seluler.

Di properti konfigurasi pada platform 1C:Enterprise 8.3 terdapat Mode untuk menggunakan modalitas. Jika nilai bidang ini adalah "Jangan gunakan", maka ketika Anda mencoba membuka jendela modal, platform akan menampilkan pesan "Penggunaan jendela modal dalam mode ini dilarang." Dalam hal ini, eksekusi kode program terhenti.

Artikel ini menunjukkan mekanisme untuk mengubah kode program, menggunakan contoh pertanyaan kepada pengguna ketika mode modal dinonaktifkan.

Dari waktu ke waktu, ketika mengembangkan produk perangkat lunak, ada kebutuhan untuk menanyakan kepada pengguna tentang tindakan yang dilakukan. Misalnya saat mengisi bagian tabel secara otomatis. Ketika, sebelum mengisi ulang PM, perlu ditanyakan kepada pengguna tentang perlunya melakukan hal ini. Dan tergantung jawabannya, PMnya akan dibersihkan dan diisi ulang, atau tidak.

Bagian pertanyaan dari kode mungkin terlihat seperti ini:

Jika PM. Kuantitas()< >0 Lalu Jawaban = Pertanyaan(" // Baris ini akan menampilkan jendela modal dengan pertanyaan dan eksekusi kode akan berhenti hingga pengguna menjawab Jika Jawaban = DialogReturnCode. Tidak, Lalu Kembali; Berakhir jika ; // Pengguna setuju untuk melanjutkan PM. Jernih() ; Berakhir jika ; // Lakukan tindakan selanjutnya // Program akan masuk ke sini jika PM kosong atau pengguna menjawab positif pertanyaan tentang isi ulang Lakukan Tindakan Lebih Lanjut () ;

Ketika mode modal dinonaktifkan, kesalahan akan terjadi pada baris pertanyaan kode ini dan eksekusi lebih lanjut akan terhenti. Hal ini terjadi karena fungsi Pertanyaan menggunakan jendela modal.

Dalam situasi ini, Anda harus menggunakan prosedur ShowQuestion. Prosedur ini tidak menunggu hingga respons pengguna selesai. Namun parameter pertama dari prosedur ini adalah deskripsi peringatan, yang digunakan untuk melacak respons pengguna.

Bagaimana kode yang ditulis sebelumnya akan berubah:

// Data PM perlu diisi // Mengecek PM untuk kelengkapannya Jika PM. Kuantitas()< >0 Lalu // PM tidak kosong, Anda perlu bertanya kepada pengguna tentang pengisian ulang ShowQuestion(Deskripsi BaruPeringatan(" Isi ulang TCCompletion" , Objek Ini, Parameter Tambahan) , " PM akan diisi ulang. Melanjutkan ?", Mode DialogPertanyaan. YaTidak) ; // Baris ini akan menampilkan jendela pertanyaan, tetapi kode tidak akan berhenti dijalankan Jika tidak // Program akan masuk ke sini jika PM kosong Lakukan Tindakan Lebih Lanjut() ; Berakhir jika ; // Program akan sampai di sini bagaimanapun juga, baik PMnya kosong atau tidak // (kecuali, tentu saja, ada kesalahan pada kode sebelumnya) . . . // Prosedur ekspor dalam modul yang sama // Dipanggil setelah pengguna menjawab pertanyaan& Pada Prosedur Klien Isi Ulang TCCompletion (Hasil Respon, Parameter Tambahan) Ekspor Jika Hasil Respon = Kode Pengembalian Dialog. Tidak, Kalau begitu // Pengguna menolak untuk melanjutkan Kembali ; Berakhir jika ; // Lakukan tindakan selanjutnya // Program akan masuk ke sini jika PM tidak kosong dan pengguna menjawab positif pertanyaan tentang isi ulang PM. Jernih() ; Lakukan Tindakan Lebih Lanjut() ; Akhir Prosedur

Jadi, karena program tidak akan berhenti ketika prosedur ShowQuestion dijalankan, semua kejadian perlu ditangani dengan hati-hati
Untuk memecahkan masalah ini, tindakan lebih lanjut dapat dilakukan ketika dua peristiwa terjadi:
1. Jika PMnya kosong
2. Jika PM tidak kosong dan pengguna menjawab pertanyaan secara positif, isi ulang

Oleh karena itu, karena program tidak berhenti menunggu respons pengguna, pemanggilan peristiwa ini harus didistribusikan ke berbagai bagian kode.
Oleh karena itu, sebagai aturan, semua metode yang dapat dieksekusi yang perlu dilakukan setelah memeriksa kelengkapan PM ditempatkan dalam prosedur terpisah.

Mekanisme serupa digunakan untuk fungsi interaksi pengguna yang serupa (SelectValue, SelectFromList, dll.)

Artikel ini akan membahas alasan utama mengabaikan modalitas di platform 1C:Enterprise dan metode utama untuk mengonversi bagian kode ke model asinkron baru.

Penerapan

Artikel ini membahas model asinkron untuk membangun logika bisnis, platform tambahan “1C:Enterprise” edisi 8.3. Informasi yang disajikan relevan untuk rilis platform saat ini.

Penolakan untuk menggunakan modal windows di platform 1C:Enterprise 8.3

Saat mengembangkan konfigurasi pada platform 1C:Enterprise 8, ada kebutuhan untuk menghentikan sementara program secara berkala hingga pengguna membuat keputusan atau melakukan tindakan apa pun.

Misalnya, ketika mengklik tombol isi bagian tabel, pengguna harus ditanya apakah bagian tabel perlu dibersihkan agar data yang dimasukkan sebelumnya tidak hilang.

Misalnya, kode berikut dapat memberikan perilaku ini:

&Pada Klien
Prosedur Isi Produk(Tim )
Answer = Question (“Bagian tabel akan dihapus. Lanjutkan?”, Mode DialogPertanyaan.YaTidak);
Jika Jawaban = Kode Pengembalian Dialog.Ya Kemudian
//algoritma pengisian
Berakhir jika ;
Akhir Prosedur

Akibat potongan kode ini, eksekusi kode program akan terhenti, sebuah pertanyaan akan ditampilkan di layar, antarmuka aplikasi kecuali dialog dengan pertanyaan menjadi tidak tersedia, sistem menunggu pengguna membuat a keputusan, dan eksekusi kode akan dilanjutkan hanya setelah pertanyaan dijawab.

Membuka jendela modal dengan memanggil metode OpenModal() juga menyebabkan jeda dalam eksekusi kode dan pemblokiran antarmuka.

Saat bekerja dengan konfigurasi dalam mode klien web melalui browser, dalam hal ini jendela baru akan terbuka - jendela pop-up yang tidak hanya memblokir tab saat ini, tetapi juga seluruh antarmuka browser, termasuk jendela dan tab terbuka lainnya.

Jendela pop-up di Internet sering kali digunakan untuk mendistribusikan iklan yang tidak diinginkan secara jahat, itulah sebabnya browser menyertakan fitur pemblokiran pop-up.

Dalam hal ini, untuk bekerja dengan konfigurasi 1C:Enterprise 8 melalui browser, Anda harus menonaktifkan pemblokiran pop-up.

Masalah juga muncul ketika bekerja pada perangkat seluler. Misalnya, modal windows tidak didukung di iPad.

Untuk mengatasi masalah ini, Anda harus menggunakan pemblokiran jendela, bukan jendela modal. Bagi pengguna, secara visual semuanya tampak sama: jendela memblokir antarmuka klien web.

Namun, jendela pemblokiran “digambar” di atas jendela utama, dan hanya tab browser saat ini di mana konfigurasi terbuka diblokir, memungkinkan Anda untuk beralih ke tab lain, karena jendela browser modal tidak digunakan.

Dengan demikian, jendela pop-up tidak terbuka di browser dan dipastikan berfungsi melalui klien web di perangkat seluler.

Elemen root dari konfigurasi memiliki properti "Modalitas mode", yang menentukan apakah jendela modal dapat dibuka dalam konfigurasi.

Jika opsi “Gunakan” dipilih, maka jendela modal dapat dibuka. Jika opsi “Jangan gunakan” dipilih, maka jendela modal tidak diperbolehkan. Saat Anda mencoba memanggil metode yang membuka jendela modal, sistem menampilkan pesan kesalahan:

Dengan nilai properti “Mode penggunaan modalitas” ini, hanya jendela pemblokiran yang diperbolehkan.

Jika opsi “Gunakan dengan peringatan” dipilih, maka ketika jendela modal dibuka, teks berikut akan ditampilkan di jendela pesan:

Opsi kerja ini dapat digunakan sebagai perantara saat mengerjakan ulang konfigurasi untuk mengabaikan penggunaan modal windows.

Perbedaan utama antara jendela pemblokiran dan jendela modal adalah membuka jendela pemblokiran tidak menghentikan sementara eksekusi kode.

Oleh karena itu, pengembang harus menulis ulang kode program yang menggunakan modal windows untuk mempertimbangkan fitur ini.

Kode perlu dibagi menjadi dua bagian:

  • membuka jendela pemblokiran;
  • memproses pilihan pengguna.

Fragmen kode yang diberikan di awal artikel perlu ditulis ulang sebagai berikut:

&Pada Klien
Prosedur Isi Produk(Tim )
Peringatan = Baru Deskripsi Alerts(, Objek Ini );

Mode DialogPertanyaan.YaTidak);
Akhir Prosedur
&Pada Klien
Prosedur (Hasil, Opsi tambahan) Ekspor
Jika Hasil = Kode Pengembalian Dialog.Ya Kemudian
//algoritma pengisian
Berakhir jika ;
Akhir Prosedur

Setelah menjalankan prosedur ShowQuestion(), sistem tidak berhenti, menunggu respon pengguna, eksekusi kode berlanjut.

Pengguna akan dapat membuat pilihan hanya setelah seluruh prosedur selesai. Dalam hal ini, prosedur ekspor FillItemsQuestionComplete() akan dipanggil. Kami meneruskan namanya ke konstruktor objek DescriptionAlerts.

Prosedur yang akan dipanggil setelah melakukan pemilihan dapat ditempatkan di modul formulir, modul perintah, atau modul umum non-global.

Dalam contoh yang dipertimbangkan, prosedur yang dipanggil terletak di modul formulir terkelola, jadi kami meneruskan parameter ThisObject.

Mari kita pertimbangkan untuk memanggil prosedur yang terletak di modul umum. Untuk melakukannya, tambahkan modul umum baru Pemrosesan Pemberitahuan, setel tanda "Klien (aplikasi terkelola)" untuk modul tersebut, dan jangan setel tanda "Global". Mari kita tempatkan prosedur Pengisian Pertanyaan Produk () pada modul ini.

Maka pengendali perintah pengisian akan terlihat seperti ini:

&Pada Klien
Prosedur Isi Produk(Tim )
Peringatan = Baru Deskripsi Alerts(“Isi Penyelesaian Pertanyaan Produk”,
Peringatan Pemrosesan);
Teks Pertanyaan = “Bagian tabel akan dihapus. Melanjutkan?" ;
ShowQuestion (Peringatan, Teks Pertanyaan, Mode DialogPertanyaan.YaTidak);
Akhir Prosedur

Setelah memanggil metode apa pun yang membuka jendela pemblokiran, prosedur harus keluar, dan kode yang berjalan selanjutnya harus ditempatkan dalam prosedur yang akan dipanggil setelah jendela ditutup.

Untuk mentransfer konteks (data tambahan, parameter tertentu, nilai variabel) dari prosedur yang membuka jendela modal ke prosedur yang dipanggil ketika ditutup, parameter opsional ketiga dari konstruktor objek disediakan: DescriptionAlerts – Parameter Tambahan.

Objek ini (jenis apa pun) akan diteruskan ke prosedur yang dijelaskan dalam Deskripsi Peringatan sebagai parameter terakhir.

Dengan menggunakan contoh bagian kode yang dibahas di atas, hal ini dapat dilakukan seperti ini:

&Pada Klien
Prosedur Isi Produk(Tim )
Parameter1 = 0;
Parameter2 = 0;
Daftar Parameter= Struktur Baru (“Parameter1, Parameter2″, Parameter1, Parameter2);
Peringatan = Baru Deskripsi Alerts(“Isi Penyelesaian Pertanyaan Produk”, Objek Ini ,
Daftar Parameter);
ShowQuestion (Peringatan, “Bagian tabel akan dihapus. Lanjutkan?”,
Mode DialogPertanyaan.YaTidak);
Akhir Prosedur
&Pada Klien
Prosedur IsikanProdukPertanyaanPenyelesaian(Hasil , Opsi tambahan) Ekspor
Jika Hasil = Kode Pengembalian Dialog.Ya Kemudian
//analisis Parameter Tambahan.Parameter1
//analisis Parameter Tambahan.Parameter2
Berakhir jika ;
Akhir Prosedur

Jika Anda hanya perlu meneruskan satu nilai, maka Anda tidak dapat menggunakan struktur tersebut, tetapi tetapkan nilai ini ke parameter Parameter Tambahan dari konstruktor objek DescriptionAlerts.

Mari kita lihat beberapa contoh cara bekerja dengan memblokir jendela.

Tugas 1: Buka formulir lain

Dari formulir dokumen, dengan mengklik tombol "Buka parameter", Anda perlu membuka formulir yang di dalamnya terdapat dua kotak centang Parameter1 dan Parameter2, yang harus disetel oleh pengguna. Setelah menutup formulir, tampilkan nilai parameter di baris pesan.

Kami membuat formulir umum "ParametersForm", di mana kami menempatkan detail Parameter1 dan Parameter2, serta perintah CloseForm:

Pengendali perintah terlihat seperti ini:

Penangan perintahnya terlihat seperti ini: &OnClient
Prosedur CloseForm (Perintah)
Daftar Parameter= Struktur Baru ( “Parameter1, Parameter2”, Parameter1 , Parameter2 );
Menutup ( Daftar Parameter); Akhir Prosedur

Untuk formulir, setel properti WindowOpenMode ke “Blokir seluruh antarmuka”:

Pada formulir dokumen kami menempatkan perintah OpenParameters, yang pengendalinya dijelaskan sebagai berikut:

&Pada Klien
Prosedur Opsi Terbuka(Tim )
Peringatan = Baru Deskripsi Alerts(“Buka Opsi Selesai”, Objek Ini );
Formulir Terbuka ( “Bentuk Umum.FormParameter”, , , , , , Pemberitahuan);
Akhir Prosedur
&Pada Klien
Prosedur OpenOptionsLengkap(Hasil , Opsi tambahan) Ekspor
Jika TypeValue (Hasil) = Tipe (“Struktur”) Lalu
Untuk setiap KeyValue Dari Result Loop
Pesan = Baru Pesan untuk Pengguna;
Pesan.Teks = “Kunci: “” ” + Nilai Kunci.Kunci + “””, nilai = ”
+ Nilai Kunci.Nilai;
Pesan.Laporan();
Siklus Akhir;
Berakhir jika ;
Akhir Prosedur

Dalam mode pengguna, menjalankan konfigurasi di bawah klien web, kami mendapatkan hasil berikut:

Untuk memperbesar, klik pada gambar.

Mode pembukaan jendela juga dapat ditentukan dalam parameter terakhir prosedur OpenForm.

&Pada Klien
Prosedur Opsi Terbuka(Tim )
Peringatan = Baru Deskripsi Alerts(“Buka Opsi Selesai”, Objek Ini );
Formulir Terbuka ( “Bentuk Umum.FormParameter”, , , , , , Pemberitahuan
FormWindowOpenMode.LockEntireInterface
);
Akhir Prosedur

Tugas 2. Pertanyaan saat menutup formulir

Saat menutup jendela pemrosesan, tanyakan kepada pengguna apakah dia benar-benar ingin menutup jendela tersebut.

Masalah ini dapat diselesaikan dengan menggunakan kode berikut yang terletak di modul formulir pemrosesan:

&Pada Klien
Perem Perlu Menutup Formulir;
&Pada Klien
Prosedur Sebelum Penutupan (Kegagalan, Pemrosesan Standar)
Jika tidak Perlu Menutup Formulir= Benar Kalau begitu
Menolak = Benar;
Peringatan = Baru Deskripsi Alerts(“Sebelum Menutup Penyelesaian”, Objek Ini );
ShowQuestion (Peringatan, “Apakah Anda yakin ingin menutup jendela?”,
Mode DialogPertanyaan.YaTidak
);
Berakhir jika ;
Akhir Prosedur
&Pada Klien
Prosedur Sebelum Penutupan Selesai(Hasil , Opsi tambahan) Ekspor
Jika Hasil = Kode Pengembalian Dialog.Ya Kemudian
Perlu Menutup Formulir= Benar ;
menutup();
Jika tidak
Perlu Menutup Formulir= Tidak terdefinisi ;
Berakhir jika ;
Akhir Prosedur

Dalam prosedur formulir SebelumPenutupan, pengguna diberikan pertanyaan, tanda Penolakan diatur ke Benar, dan penutupan formulir dibatalkan.

Setelah jawaban afirmatif terhadap pertanyaan tersebut, variabel Need toCloseForm diatur ke True, dan formulir ditutup kembali.

Tugas 3: Memasukkan Nilai Numerik

Saat Anda mengklik tombol pada formulir pemrosesan, buka dialog entri nomor standar.

Untuk melakukan ini, Anda perlu menggunakan metode ShowNumberInput() alih-alih EnterNumber(), yang membuka jendela pemblokiran alih-alih jendela modal.

&Pada Klien
Prosedur Memasukkan Angka (Command)
Peringatan = Baru Deskripsi Alerts(“Masukkan Nomor Selesai”, Objek Ini );
TampilkanEnterNumbers(Peringatan, 0, “Masukkan kuantitas”, 15, 3);
Akhir Prosedur
&Pada Klien
Prosedur Memasukkan Angka Menyelesaikan(Hasil , Opsi tambahan) Ekspor

Pesan = Baru Pesan untuk Pengguna;
Message.Text = “Anda telah memasukkan jumlah” + Hasil;
Pesan.Laporan();
Berakhir jika ;
Akhir Prosedur

Setelah menutup jendela entri nomor, sebuah prosedur akan dipanggil, parameter pertama adalah nomor yang dimasukkan atau nilai Tidak ditentukan jika pengguna menolak untuk masuk.

Tugas 4. Memilih warna

Saat Anda mengklik tombol pada formulir pemrosesan, menggunakan dialog pemilihan warna standar, pengguna menentukan warna yang diperlukan. Atur warna ini untuk latar belakang tombol yang diklik.

Tambahkan perintah SelectColor ke formulir dengan handler berikut:

&Pada Klien
Prosedur Pemilihan Warna (Perintah)
Dialog Pemilihan Warna= Baru Dialog Pemilihan Warna;
Peringatan = Baru Deskripsi Alerts(“Pemilihan Warna Lengkap”, Objek Ini );
Dialog Pemilihan Warna. Tampilkan (Peringatan);
Akhir Prosedur
&Pada Klien
Prosedur PilihanWarnaPenyelesaian(Hasil , Opsi tambahan) Ekspor
Jika BUKAN Hasil = Tidak Terdefinisi Maka
Elemen.Pilihan Warna.Warna Latar Belakang= Hasil ;
Berakhir jika ;
Akhir Prosedur

Untuk objek Dialog Pemilihan Warna (serta Dialog Pengeditan Periode Standar, Pembuat Garis Format, Dialog Jadwal Tugas Reguler, Dialog Pemilihan Font), metode Show() membuka jendela pemblokiran.

Setelah menutup jendela, sebuah prosedur akan dipanggil, parameter pertama yang akan meneruskan nilai yang dipilih (warna, font, dll.) atau nilai Tidak Terdefinisi jika pengguna menolak pilihan tersebut.

Perlu dicatat bahwa objek FileSelectionDialog tidak memiliki metode Show(), tidak seperti dialog pemilihan warna atau font, karena implementasi dialog ini sangat berbeda.

Untuk menggunakan dialog pemilihan file di klien web, Anda harus mengaktifkan ekstensi file terlebih dahulu.

Dialog yang diterapkan melalui ekstensi file tidak menimbulkan masalah operasional yang sama seperti jendela browser modal, sehingga membuka jendela pemblokiran untuk objek FileSelectionDialog tidak diterapkan.

Sebagai kesimpulan, kami mencatat bahwa mulai rilis 8.3.10, dukungan untuk modal windows telah dihentikan di klien web. Dalam hal ini, jika metode modal dipanggil dalam konfigurasi, pengecualian akan dihasilkan. Selain itu, dukungan untuk mode antarmuka telah dihentikan di klien web Di jendela terpisah. Selain itu, baik di klien tipis maupun web, tidak mungkin lagi membuka formulir di jendela terpisah (saat bekerja dalam mode antarmuka Bookmark). Langkah drastis seperti itu memungkinkan untuk meninggalkan mode antarmuka, yang tidak lagi didukung oleh semua browser modern.

Kesimpulan praktis apa yang dapat diambil dari informasi ini? Dan kesimpulannya cukup sederhana - jika karena alasan tertentu masih ada panggilan modal dalam konfigurasi Anda, maka di tempat-tempat ini di klien web sebuah jendela dengan pesan kesalahan akan ditampilkan. Saya ingin memperingatkan agar tidak mencoba "Google" beberapa solusi cepat untuk masalah ini, karena... Sebagian besar saran berasal dari resep ini: di konfigurator pada tingkat konfigurasi, setel properti "Mode penggunaan modalitas" ke "Gunakan". Tentu saja, saat ini ini tidak akan berfungsi hanya karena browser modern itu sendiri tidak lagi mendukung panggilan modal.

Dan Anda hanya memiliki dua cara untuk menyelesaikan masalah yang dijelaskan di atas:

  1. Perbarui platform ke rilis 8.3.10+ (8.3.11), setel properti konfigurasi "Mode Kompatibilitas" ke "Jangan gunakan" dan tulis ulang fragmen kode yang menggunakan metode modal ke model logika bisnis asinkron
  2. Merekomendasikan klien Anda untuk menggunakan browser lama yang masih mendukung panggilan modal (Mozilla Firefox versi 37 ke bawah, Chrome versi di bawah 37, dll.).

Omong-omong, mulai rilis 8.3.11, browser web Microsoft Internet Explorer versi 8 dan 9 tidak lagi didukung.

Kami telah menangani browser web berdasarkan modalitas, sekarang saatnya untuk mengklarifikasi situasi dengan klien lain.

Dimulai dengan versi 8.3.5, properti Mode Penggunaan Modalitas di klien tipis dan tebal hanya dipatuhi jika opsi baris perintah /EnableCheckModal ditentukan. Parameter ini secara otomatis dimasukkan ke dalam baris perintah hanya ketika aplikasi diluncurkan dari konfigurator. Jika parameter ini tidak ditentukan, maka tidak ada pengecualian yang dihasilkan dan peringatan terkait tidak ditampilkan. Itu. dalam praktiknya, saat menggunakan klien tebal dan tipis, tidak ada perubahan mendasar dalam pengoperasian yang diamati saat menggunakan mode modal - panggilan modal akan berfungsi sama seperti sebelumnya, tanpa menghasilkan peringatan apa pun, seperti di klien web.

Untuk menandai semua "i", kami mencatat bahwa mulai dari edisi 8.3.9, properti konfigurasi "Mode penggunaan panggilan sinkron dari ekstensi platform dan komponen eksternal" diabaikan di klien tebal, sedangkan metode sinkron yang sesuai berfungsi tanpa menghasilkan pengecualian dan menampilkan peringatan. Properti diabaikan yang ditentukan telah ditambahkan di versi 8.3.5 untuk mendukung pekerjaan asinkron dengan komponen eksternal, kriptografi, dan ekstensi untuk bekerja dengan file di browser web Google Chrome. Jelas bahwa ini tidak ada hubungannya dengan klien tebal, dan oleh karena itu mengabaikan properti ini secara "diam-diam" hanya menghilangkan pemeriksaan yang tidak perlu untuk penggunaan metode sinkron saat menggunakan konfigurasi.

Omong-omong! Karena kenyataan bahwa platform dengan percaya diri bergerak menuju web, dengan versi 8.3.8 pengembang telah memperkenalkan batasan tertentu pada kode program yang terkait dengan logika untuk menutup formulir atau aplikasi, yang dijalankan di klien tebal dan tipis. Pastikan untuk membaca artikel kami yang membahas nuansa ini secara mendetail. Selain itu, dalam kursus “Pengembangan profesional antarmuka dan formulir di 1C: Enterprise 8.3”, ada bab yang didedikasikan untuk mengabaikan modalitas, dan Anda dapat memperoleh banyak informasi berguna dan relevan tentang topik ini.

Rekan-rekan, ada dua hal yang dapat Anda baca tanpa henti: feed VKontakte dan daftar perubahan pada rilis platform berikutnya, jadi mari kita simpulkan hasil akhirnya;)

Dalam proses mempertimbangkan contoh yang memungkinkan Anda berpindah dari elemen model sinkron ke model asinkron, Anda mungkin telah memperhatikan bahwa secara umum terdapat lebih banyak kode program. Semakin banyak kode yang ada, semakin besar kompleksitas pemeliharaan dan debugging lebih lanjut.

Selain itu, jumlah kode akan semakin bertambah jika kita menggunakan lebih banyak dialog selama proses pengembangan. Oleh karena itu, dalam proses pengembangan solusi aplikasi yang berfokus pada pekerjaan di klien web, perlu diingat paradigma kerja yang saat ini digunakan dalam aplikasi web modern. Oleh karena itu, jika konfigurasi Anda memiliki banyak dialog interaktif dengan pengguna dan peringatan, maka masuk akal untuk mempertimbangkan kembali fungsi ini demi beberapa pendekatan lain untuk mengatur interaksi pengguna.

Alih-alih sebuah kesimpulan

Siklus kami “Langkah pertama dalam pengembangan 1C” telah berakhir. Jika Anda membacanya secara keseluruhan, kemungkinan besar Anda telah memperhatikan bagaimana platform ini berkembang pesat akhir-akhir ini. Materi dalam seri ini ditulis relatif baru, namun kami terpaksa memperbaruinya secara serius, karena... Bahkan dalam waktu sesingkat itu, banyak fungsi dan perubahan penting baru yang muncul. Perubahan besar seperti itu mungkin agak membingungkan bagi seorang programmer 1C jika selama ini dia tidak tumbuh dan berkembang secara profesional dengan platform tersebut.

Pada sumber daya Internet khusus, Anda sering dapat membaca permintaan dari pemrogram pemula dan rekan mereka yang lebih dewasa untuk merekomendasikan materi yang akan membantu mereka memahami kemampuan platform 1C yang luas dan terkadang tampaknya tak ada habisnya. Kami, secara tradisional, menyarankan Anda memperhatikan kursus pemrograman kami

Pengenalan antarmuka baru platform 1C 8.3 - "taksi" - menyebabkan fakta bahwa pengguna dan pemrogram dihadapkan pada kesalahan berikut: "Penggunaan modal windows dalam mode ini dilarang."
Beras. 1

Pengembang platform teknologi 1C berusaha mengikuti tren global dengan menjadikan perangkat lunak sejalan dengan standar internasional. Yang terakhir pasti mengarah ke satu antarmuka, dekat dengan halaman web.

Modal dan jendela pop-up, yang merupakan pertanda selera buruk, telah lama dianggap tidak dapat diterima dalam pengembangan perangkat lunak. Kebutuhan untuk bekerja “dalam satu jendela” tertanam kuat di benak pengguna.

Pengembang platform 1C berupaya melibatkan pengembang solusi aplikasi dalam bekerja dengan “cara baru”. Dengan diperkenalkannya antarmuka "taksi" baru, mereka menambahkan fitur baru ke platform baru - "mode menggunakan modalitas".

Perbaikan cepat

Dengan tidak adanya waktu, jika Anda perlu menyelesaikan masalah dengan cepat, Anda dapat menggunakan solusi yang cukup sederhana, tetapi tidak terlalu tepat - Anda hanya perlu mengubah mode modalitas di properti konfigurasi.

Untuk melakukan ini, masuk ke sistem dalam mode konfigurator dan buka konfigurasi:

Setelah itu, dengan mengklik kanan pada root konfigurasi, buka menu konteks dan pilih “Properties”:


Beras. 3

Di properti konfigurasi yang terbuka, di tab, temukan "Mode penggunaan modalitas", di dalamnya pilih "Gunakan":


Beras. 4

Simpan dan terapkan perubahan Anda dengan menekan tombol "F7".