"Bu modda kalıcı pencerelerin kullanılması yasaksa" ne yapılmalı? "Bu modda modal pencerelerin kullanılması yasaktır" hatası neden oluşuyor? 1 saniye içinde modal pencerelerin kullanımına izin ver

8.3.3.641 sürümünde uygulandı.

1C:Enterprise, kullanıcının bilgi girmesi gerektiğinde, algoritmanın daha fazla yürütülmesinin imkansız olduğu durumlarda kalıcı pencereler kullanır. Bu durumda, program arayüzünün geri kalanı tamamen engellenir ve program kodunun yürütülmesi, kullanıcı mod penceresini kapatana kadar durur.

Web istemcisinin ortaya çıkışı ve 1C:Enterprise'ın mobil platformlara geçişiyle, modal pencereler, genellikle çözülemeyen çok sayıda rahatsızlık ve sorunun kaynağı haline geldi.

Kural olarak, "masaüstü" tarayıcılar daha iyi veya daha kötüdür, ancak modları destekler ve bunları yeni bir tarayıcı penceresinde "açılır pencere" olarak açar:

Ancak, internette reklam yerleştirmek için pop-up teknolojisinin yoğun bir şekilde kullanılması nedeniyle, açılır pencereler neredeyse tüm tarayıcılarda varsayılan olarak devre dışıdır. Çoğu durumda, bu tarayıcı ayarı değiştirilmeden web istemcisinin çalışması imkansız hale gelir.

Başka bir sorun da mobil tarayıcıların modalları hiç desteklememesidir. Ve 1C:Enterprise'ın içlerinde çalışabilmesi için web istemcisinde özel bir mekanizma uygulandı. Bu oldukça karmaşık bir mekanizma ve ne yazık ki gerekli tüm durumları kapsamıyor. Sonuç olarak, örneğin iPad'deki yapılandırmalarla çalışmak çok zordur.

Böyle bir durumda, kalıcı pencerelerin kullanılmadığı 1C:Enterprise arabiriminin varyantı, yukarıda listelenen tüm sorunları ortadan kaldırır.

Bu, daha önce kalıcı pencereler tarafından sağlanan işlevsellikten vazgeçmez. Ancak bu işlevsellik, 1C:Enterprise'ın tarayıcılarda çalışmasını engellemeyen diğer teknolojiler tarafından uygulanır.

Arayüzün yeni modunda, daha önce kalıcı olan bir pencere ana pencere içinde çizilir ve web istemci arayüzünün geri kalanını aynı şekilde engeller:

Sonuç olarak:

  • web istemcisinin performansını ve kararlılığını artıran yeni tarayıcı pencereleri açılmaz;
  • çoğu durumda, 1C:Enterprise artık açılır pencereler kullanmadığından, ek tarayıcı ayarları gereksiz hale gelir;
  • web istemcisini kullanan herhangi bir yapılandırma, iPad ve diğer mobil cihazlarda çalışabilir.

Doğal olarak mucizeler olmaz ve yeni çalışma modu "sihirli bir değnek sallayarak" etkinleştirilemez. Yeni, engelleyici pencerelerle çalışma mantığında bir değişiklik gerekiyor. Ancak iyi haber şu ki, bu değişiklikler zor değil ve programdaki tüm "şüpheli" yerleri kontrol etmek mümkün. Platform, geliştirme aşamasında tüm yapılandırmanın yeni mekanizmalar kullandığını ve kalıcı pencereler olmadan çalışacağını kontrol etmenizi sağlayan özel bir mekanizma uygular.

Bu tür pencerelerle çalışma mantığını değiştirme ihtiyacı, arayüzün yeni modunun yalnızca kullanıcı için modalite sağlamasından kaynaklanmaktadır. Ancak geliştirici için engelleme penceresi görüntülendiği anda program kodunun yürütülmesi durmaz.

Bu, eskiden bir bütün olan algoritmanın artık iki parçaya bölünmesi gerektiği anlamına gelir. Engelleme penceresinin açılmasıyla sona eren ve kullanıcı engelleme penceresini kapattığında yürütülecek olan. Sistemin program kodunu çalıştırmaya devam edeceği yeri bilmesi için, engelleme penceresine, kullanıcı bu pencereyi kapattığında yürütülmesi gereken prosedürün adı verilir.

Bu değişikliklerin özünü bir örnekle görmek en kolayıdır. Kalıcı bir pencere açan ve aldığı verileri işleyen eski prosedür şöyle görünebilir:

Formun yeni versiyonunda FormGirdiMetin (bir engelleme penceresinde açılacaktır) özelliği ayarlamanız gerekir Pencere Açma Modu anlam içine Tüm Arayüzü Engelle . Bu, kullanıcıya modaliteyi sağlayacaktır:

Ve program kodu, daha önce olduğu gibi bir prosedür yerine zaten iki prosedür içerecektir:

İlk prosedürde formu açıyoruz. Bu durumda, son parametrede, kullanıcı pencereyi kapattıktan sonra yürütülecek olan ikinci prosedürün konumunu ona iletiyoruz. Bu durumda, bu prosedür aynı modülde bulunur, ancak genel olarak başka bir modülde bulunabilir.

Kullanıcı verileri girip formu kapattığında, içine alınan verileri işleyen "eski" kodu basitçe aktardığımız, belirttiğimiz ikinci prosedürde işlenecektir.

Geliştiricinin kip modunda (istediğinde) açabileceği formlara ek olarak, geliştiricinin isteği ne olursa olsun, veri girmek veya seçmek için her zaman kipsel formları açan yerleşik dil yöntemleri vardır. Örneğin, yöntem Değer Gir() .

Bu tür yöntemleri modsuz modda kullanmak daha da kolaydır. Bu tür tüm yöntemler için, platformda yinelenen yöntemler bulunur, çağrıldığında, kullanıcı pencereyi kapattıktan sonra yürütülecek yordamın konumunu da belirtmeniz gerekir.

Örneğin, aşağıda eski yöntemin kullanımı gösterilmektedir. Değer Gir() ve yeni stand-in yöntemi Giriş Değerlerini Göster() :

Listelenen durumlara ek olarak, bazı platform mekanizmalarının da kullanıcıyla etkileşim kurmak için modal pencereler kullandığı söylenmelidir. Ve geliştiricinin eylemlerine bağlı değildir.

Bu nedenle, platformun tüm bu tür sistem diyalogları da çalışmanın kipsiz bir versiyonuna geçirilmiştir.

Uygulama çözümlerinde modal pencerelerin kullanımından kademeli olarak vazgeçilmesi planlanmaktadır. Bu nedenle, daha önce yazılan uygulamalı çözümlerle uyumluluk için platform, modal pencereleri kullanarak arayüzün eski sürümünde çalışma yeteneğini korur.

Dersleri işleme sürecinde böyle bir hatanız varsa, bunu düzeltmek çok kolaydır.

Konfigüratöre geri dönün ve "Konfigürasyon" -> "Konfigürasyonu aç" menü öğesini seçin:

Açılan pencerede "Konfigürasyon" öğesine sağ tıklayın ve açılır menüden "Özellikler" öğesini seçin:

Yapılandırma özelliklerine sahip bir pencere açılacaktır (sağda):

En alta kaydırın ve orada "Modalite kullanım modu" öğesini bulun:

Değerini şu şekilde ayarlayın: "Kullanmak":

Dikkat!İlk derste (sonraki sürüm) indirdiğimizden farklı bir 1C platformu kullanıyorsanız, "Senkronize çağrılar kullanım modu ..." alanına da sahip olacağınızı lütfen unutmayın. Ayrıca "Kullan" olarak ayarlanması gerekir.

Son olarak, "Konfigürasyon" -> "Konfigürasyonu kaydet" menü öğesini seçin:

Hazır! Artık hata oluşmayacaktır.

Aşağıda açıklamalar - yaptıklarımızı merak edenler için.

Yapılandırmamızda modalite modunu etkinleştirdik. Varsayılan olarak bu mod devre dışıdır ve EnterNumber, EnterString, EnterDate, OpenValue gibi komutları kullanmamıza izin vermez.

Gerçek şu ki, bu komutlar kiplidir. Çağrıları, kullanıcının önünde (örneğin, bilgi girmek için) pencere kapanana kadar programla çalışma yeteneğini engelleyen bir pencerenin görünmesine yol açar.

Ve bir web tarayıcısı aracılığıyla 1C ile çalışırken bu tür pencerelerin varlığı son derece istenmeyen bir durum olduğundan, yeni yapılandırmalar geliştirirken, modalite modu varsayılan olarak kapalıdır.

İnternette çalışmak üzere tasarlanmamış eğitim örnekleri yazdığımız için bunu güvenle dahil edebiliriz.

Çeşitli sistemlerle ve özellikle 1C'de çalışırken oldukça alışık olduğumuz iletişim kutuları, çeşitli eylemler gerçekleştirirken görünebilir, kullanıcının herhangi bir veri girmesini, örneğin belirli bir değeri, bir dosya seçmesini, bir dosyayı yanıtlamasını gerektirir. soru sor veya sadece bir uyarı ver. Modal olarak da adlandırılırlar.

Böyle bir pencerenin isteğine yanıt verilmeden programda çalışmaya devam etmek mümkün değildir. Pencere arayüzü engeller, diğer pencerelerin çalışmasını engeller ve aynı zamanda program kodlarının yürütülmesi de diyaloğun çağrıldığı yerde durur - program, onunla eylemin tamamlanmasını bekler.

Diyaloglar genellikle ince ve kalın istemci başlatma modunda sorunlara neden olmaz, ancak web istemcisi ile çalışırken sorunlar ortaya çıkabilir. Bunun nedeni, İnternet'teki aynı sistem öğelerinin reklam ortamı olarak kullanılması ve kullanıcıların genellikle tarayıcı ayarlarında görüntülerini devre dışı bırakmasıdır. Buna göre, çalışmaları da bir web tarayıcısı üzerinden çalışan bir programda engellenir. Bu nedenle, bir web istemcisi veya bir mobil platform aracılığıyla 1C ile çalışırken, ek tarayıcı ayarları yapmayı unutmamalı ve mobil tarayıcının açılır mesajları hiç desteklemediğini unutmayın.

1C'de bir hata nasıl düzeltilir: "Bu modda kalıcı pencerelerin kullanılması yasaktır"

Böyle bir hata, 1C'nin 1C 8.3 platformunun yeni arayüzü olan Taksi'ye geçişinden sonra ortaya çıkmaya başladı. Bunun nedeni, geliştiricilerin modalite modu olmadan pencerelerle çalışmayı içermesidir.

Şekil 1

Bilgi bankasını "Configurator" modunda açalım ve sağ tıklayıp "Properties" komutunu seçerek konfigürasyonumuzun özelliklerini görelim. Aşağıdaki satırda aşağı kaydırdığımızda bizi ilgilendiren mod parametresinin yer aldığı ve seçeneklerin listelendiği "Uyumluluk" bölümünü görüyoruz - "Kullan / Uyarı ile kullan / Kullanma."



İncir. 2

Bundan sonra, yapılandırmadaki değişiklikleri kaydetmeniz ve güncellemeniz gerekir. Bahsettiğimiz hata, modalite modunu kullanmamak için bir onay kutusu olduğunda ortaya çıkıyor. Bu özellik, Eylül 2013'te yayınlanan platform 8.3.3.721'den beri mevcuttur. Yani, platformun eski sürümlerinde çalışan kullanıcıların bu modaliteyi devre dışı bırakmasına gerek yoktur. Diğer sürümlerde, hata penceresinin görünmemesi için basitçe "Kullan" olarak ayarlayabilirsiniz.

Örneğimizde uyarı seçeneği ayarlanmıştır. Elbette, gelecekte geliştiriciler, kalıcı pencereleri atlayarak diğer işlevleri kullanmak için yapılandırmayı sonlandıracaklar. Ancak bugün, örneğimizdeki mod, geliştirici tarafından geçiş sırasında, tüm yapılandırma henüz modelsiz moda yeniden yapılmadığında kullanılıyor. Bu nedenle, program ayrıca modal özelliklere sahip pencerelerin yasaklanması hakkında mesajlar verecektir.



Şek. 3

Web istemcisi aracılığıyla, iPad'de, bulutta, örneğin "1cfresh.com"da kullanılan uygulamalar bu modu kullanmaz. Tüm yeni konfigürasyonlar arayüzün modal modunu kullanır.

Modalitenin reddi

Küresel eğilimleri destekleyen 1C programının geliştiricileri, program arayüzünü web örneklerine yaklaştırmaya ve tek bir standarda getirmeye çalışıyor, böylece kullanıcılara her zamanki "dış" ile aynı pencerede çalışma fırsatı veriyor.

Bu nedenle (ve yukarıda açıklanan sorunları ortadan kaldırmak için), çözümlerin işlevselliğini sınırlamadan açılır pencerelerin ortadan kaldırılmasına karar verildi. Aynı zamanda, yeni program çalışma modundaki mesajlar, daha önce olduğu gibi kalıcı pencerede değil, ana pencerede görünür. Yine de tüm arayüzü engellemesine rağmen.

Yani yenilik bizi ek tarayıcı ayarları ihtiyacından kurtarıyor, web istemcisini dengeliyor ve performansını artırıyor. Ayrıca artık pop-up açmaya gerek olmadığından, bu değişikliklerle herhangi bir yapılandırma herhangi bir cihazda kullanılabilir.

1C platform sürüm 8.3'te, modalite kullanılmadan yeni bir program çalıştırma modu ortaya çıktı. Daha doğrusu, 2 yeni mod ortaya çıktı: modalite kullanmadan ve modalite kullanmadan, ancak bir uyarı ile. Ve eski çalışma modu, modalitenin kullanıldığı belirtilir.

Tüm bunların anlamı ne? Platformun ilk sürümlerinde çeşitli modal pencereler kullandık ve bunun hakkında pek düşünmedik. Örneğin, kullanıcıya bir uyarı göstermeniz veya bir soru sormanız veya bir değer girmeniz veya bir dosya seçmeniz gerekiyor. Bunların hepsi kalıcı pencerelerdir.

modal ne demek? Bu, bu pencere çağrıldığında diğer tüm pencerelerle örtüştüğü, yani en üstte görüntülendiği ve bu pencereyle çalışma tamamlanana kadar diğer pencerelerle çalışmayı engellediği anlamına gelir. Engelleme pencerelerine ek olarak, kod yürütme tam olarak bu pencerenin çağrıldığı yerde durur ve kod yürütme ancak böyle bir pencere kapatıldıktan sonra devam eder. İnfazın durduğu yerden. Dönem seçim formunun çağrılması örneğini kullanarak modal pencerenin çağrılmasını açıklayacağım:

&İstemcide

Standart İşleme = Yanlış;




If Dialog.Edit() Sonra //Kipsel formu çağırın. Kod yürütme yalnızca form kapatıldıktan sonra devam edecektir.
Elements.Services.CurrentData.StartDate = Dialog.Period.StartDate;
Elements.Services.CurrentData.EndDate = Dialog.Period.EndDate;
EndIf;

Prosedürü Bitir


Gördüğümüz gibi, modal dönem seçim penceresinin çağrısını işlemek için bir prosedür yeterlidir.

Modeller neden kötü?Şimdi 1C'nin neden modal pencereleri kullanmayı bırakmaya karar verdiğini anlayalım. Her şeyden önce, bu, 1C platformunun yalnızca normal haliyle - bir masaüstü uygulaması olarak kullanılabilmesinin yanı sıra bir tarayıcıda da başlatılabilmesinin ve bir mobil uygulama olarak başlatılabilmesinin bir sonucudur.

Sorun tarayıcılarda. İçlerindeki pencerelerin modalitesi, açılır tek tek tarayıcı pencereleri kullanılarak gerçekleştirilir. Hemen hemen tüm tarayıcılar tarafından desteklenirler, ancak bu tür pencerelerin reklam için sık kullanılması nedeniyle, neredeyse tüm tarayıcı geliştiricileri bunlarla mücadele eder ve bu tür pencereleri varsayılan olarak kullanma yeteneğini devre dışı bırakır. Sonuç olarak, 1s kullanıcısının tarayıcıda çalışabilmesini sağlamak için, onu bu pencerelere izin vermeye, 1'lerin ve tarayıcıların tüm inceliklerine adamaya ve genellikle gereksiz bilgilerle aşırı yüklenmeye zorlamanız gerekir.

Tablet bilgisayarlar için tarayıcılar ve telefonlar için tarayıcılar ile ayrı bir nüans. Çoğu durumda, bu tarayıcılar açılır pencereleri desteklemez. Bu tür açılır aygıtların arabirimleri (monitörler ve giriş aygıtları) uyumlu değildir.

Ve son olarak, 1C mobil uygulaması da modal pencerelerle pek uyumlu değil.

Dolayısıyla sonuç: kalıcı pencereler kullanmayın. Ve onların yerine ne kullanmalı? Bunun yerine, modalite modu olmadan aynı pencereleri kullanmanız gerekir. Yeni platformda 1C ayrıca her pencere için böyle bir mod geliştirdi. Her iletişim kutusu için ayrı bir yöntem olarak uygulanır. Bu mod, pencereyi aramanıza izin verir, ancak program kodunun yürütülmesini durdurmaz. Teknik olarak, tarayıcılarda bu, ana pencerenin içinde görünen ancak onunla örtüşen sözde bir pencere olarak uygulanır. Pencere açıldıktan sonra kodun çalıştırılmaya devam etmesi, pencere çağrı kodundan hemen sonra içinde seçilen değerleri alamayacağınız anlamına gelir. Henüz seçilmediler. Bu nedenle, bu değerlerin alınması ve işlenmesi, böyle bir pencere kapatıldığında çağrılan ayrı bir prosedürde gerçekleştirilir ve bu prosedür, pencere açma yöntemi çağrılırken belirtilir. Aynı dönem seçim penceresi örneğine bakalım.

&İstemcide
Hizmet ProsedürüStartDateSelectionStart(Item, ChoiceData, StandardProcessing)

Standart İşleme = Yanlış;

Diyalog = Yeni DialogEditStandardPeriod();
StandardPeriod = Yeni StandardPeriod();

BaşlangıçTarihi = Items.Services.CurrentData.StartDate;
EndDate = Items.Services.CurrentData.EndDate;

StandardPeriod.StartDate = BaşlangıçTarihi;
StandardPeriod.EndDate = BitişTarihi;
Dialog.Period = StandardPeriod;

AlertDescription = New AlertDescription("ProcessingPeriodSelect",ThisForm);

Dialog.Show(DescriptionAlerts)

Prosedürü Bitir

&İstemcide
Prosedür İşlemePeriodSelect(Dönem,Parametreler) Dışa Aktarma

Eğer Dönem<>tanımsız sonra

Items.Services.CurrentData.StartDate = Dönem.StartDate;
Items.Services.CurrentData.EndDate = Dönem.EndDate;

EndIf;

Prosedürü Bitir


Gördüğümüz gibi, Edit() yerine Show() çağrılır. Ve zaten başka bir prosedürde bir seçim olayının işlenmesi.

Böylece, modalite olmadan nasıl yapacağımızı bulduk. Şimdi bir uyarı ile bir kip kullanma kipine neden ihtiyaç duyduğumuzu bulalım. Aslında, bu böyle bir geçiş modudur. Bir modalite kullanmadan tüm yapılandırmanızı bir kipe dönüştürmeyi henüz başaramadıysanız, ancak zaten bunun için çabalıyorsanız. Ve bir kalıcı pencereyi her çağırdığınızda, program size bu modda kalıcı pencereleri çağırmanın istenmeyen bir durum olduğuna dair bir uyarı verecektir.

Modaliteyi bırakıyoruz ve tarayıcılarda ve mobil bilgisayarlarda 1C çalışması için yeni teknolojilerde ustalaşıyoruz.

15
Aşağıdaki anahtarlar, Normal veya Yönetilen bir uygulamada bir kuruluşun başlatılmasını zorlamak için kullanılır: /RunModeOrdinaryApplication, yapılandırma ayarlarına ve hangi kullanıcının adına olduğuna bakılmaksızın kalın bir istemciyi normal modda başlatır. 3
Kullanıcıların kendileri için yapılandırılan arayüzü değiştirememeleri gereklidir! Çözüm: Devre dışı bırakmak için, erişim haklarındaki kök yapılandırma öğesinden "Kullanıcı verilerini kaydet" öğesini kaldırmanız gerekir. Panel ayarları ve menü öğesi devre dışı bırakılır. 2
Mevcut çalışmada, kullanıcı genellikle birkaç nesne açar. Bir belge, referans kitabı, rapor vb. olabilir. Önceki arayüzde, açık bir nesneyi hızlı bir şekilde bulmakta ve pencereleri kullanarak daha fazla çalışma için güncellemede herhangi bir sorun yoktu veya 2
Son makalede: 1C'de adres sınıflandırıcısını (KLADR) kurmak, size Kladr'ın ne olduğunu ve 1C normal formlarına (8.0-8.2) nasıl yükleneceğini anlattım. Bu yazıda, yönetilen arayüzde Adres Sınıflandırıcının (KLADR) nasıl yüklendiğini anlatacağım ve 2
Genellikle, belirli bir yapılandırma geliştirirken, kullanıcılar dizinin bir öğesine fotoğraf eklemek ve bunları veritabanında saklamak isterler. Bu yazıda size bir referans kitabı şeklindeki bir fotoğraf deposunu inşaat nesnelerinin referans kitabına nasıl bağlayacağınızı anlatacağım.

Fok
Konunun devamı:
pencereler

Bugün skyrim'de kusursuz bir yakutun nerede bulunacağını ve bunun ne işe yaradığını öğreneceğiz. En iyi seçim, "Tek Tedavi" (Tek Tedavi) adlı görevi almaktır.