internet pencereler Android

1s içinde kalıcı pencereler nasıl kaldırılır. Neden "Bu modda kalıcı pencerelerin kullanılması yasaktır" hatası oluşuyor? Sorun için hızlı düzeltme

14
Bir kuruluşu Normal veya Yönetilen bir uygulamada başlatmaya zorlamak için aşağıdaki anahtarlar kullanılır: / RunModeOrdinaryApplication, yapılandırma ayarlarına ve ... 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, kök yapılandırma öğesinin erişim haklarındaki "Kullanıcı verilerini kaydet" hakkını kaldırmanız gerekir. ... 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 bulma ve güncelleme için herhangi bir sorun yoktu ... 2
Son makalede: 1C'ye bir adres sınıflandırıcı (KLADR) kurmak, Kladr'ın ne olduğunu ve 1C sıradan formlarına (8.0-8.2) nasıl yükleneceğini anlattım. Bu yazımda, Adres Sınıflandırıcının (KLADR) nasıl yüklendiğini ... 2
Genellikle, belirli bir konfigürasyon geliştirirken, kullanıcılar dizinin bir öğesine fotoğraf eklemek ve böylece veritabanında saklanmak isterler. Bu yazımda sizlere inşaat objelerini dizine nasıl bağlayacağınızı anlatacağım...

1C 8.3 platformunun yeni bir arayüzünün - "taksi" - tanıtılması, kullanıcıların ve programcıların aşağıdaki içerikte bir hatayla karşılaşmasına neden oldu: kalıcı pencereler v bu mod yasaklı".
Pirinç. 1

1C teknolojik platformunun geliştiricileri, küresel trendlerde başarılı olmaya çalışıyor. yazılım uluslararası standartlara uygun olarak. İkincisi kaçınılmaz olarak web sayfalarına yakın birleşik bir arayüze yol açar.

Modal ve açılır pencereler, kötü tadın bir işareti olarak, yazılım geliştirmede uzun zamandır kabul edilemez olarak kabul edilmiştir. "Tek pencerede" çalışma ihtiyacı, kullanıcıların zihninde sağlam bir şekilde kök salmıştır.

1C platformunun geliştiricileri, uygulamalı çözümlerin geliştiricilerini "yeni bir şekilde" çalışmak için tanıtmaya çalıştı. Yeni taksi arayüzünün tanıtımıyla yeni platformu tamamladılar yeni fonksiyon- "modaliteyi kullanma modu".

Sorun için hızlı düzeltme

Zamanın yokluğunda, sorunu hızlı bir şekilde çözmeniz gerekiyorsa, oldukça basit, ancak çok doğru olmayan bir çözüme başvurabilirsiniz - yapılandırma özelliklerinde modalite modunu değiştirmeniz yeterlidir.

Bunun için konfigüratör modunda sisteme gidin, konfigürasyonu açın:

Bundan sonra, açmak için yapılandırma köküne sağ tıklayın bağlam menüsü, "Özellikler"i seçin:


Pirinç. 3

Sekmelerde açılan konfigürasyon özelliklerinde "Modalite kullanım modu"nu bulun, içinde "Kullan"ı seçin:


Pirinç. 4

"F7" tuşuna basarak değişiklikleri kaydedin ve uygulayın.

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 modal pencereler kullanır. Bu durumda, program arayüzünün geri kalanının tamamı tamamen engellenir ve kullanıcı mod penceresini kapatana kadar program kodunun yürütülmesi durur.

Web istemcisinin ortaya çıkışı ve 1C: Enterprise'ın geçişi ile mobil platformlar, modals kaynak olduğu ortaya çıktı Büyük bir sayı rahatsızlıklar ve problemler, genellikle çözülemez.

Tipik olarak, "masaüstü" tarayıcılar daha iyi veya daha kötüdür, ancak kalıcı pencereleri desteklerler ve bunları yeni bir tarayıcı penceresinde "açılır pencere" olarak açarlar:

Ancak, pop-up teknolojisinin İnternet'te reklamcılık için yaygın olarak kullanılması nedeniyle, neredeyse tüm tarayıcılarda pop-up'lar varsayılan olarak devre dışı bırakılmıştır. Çoğu durumda, bu tarayıcı ayarını değiştirmeden web istemcisinin çalışması imkansız hale gelir.

Bir diğer sorun da şu mobil tarayıcılar modları hiç desteklemeyin. Ve 1C: Enterprise içlerinde çalışabilmesi için web istemcisinde özel bir mekanizma uygulandı. Bu oldukça karmaşık bir mekanizmadır ve ne yazık ki gerekli tüm durumları kapsamamaktadır. Sonuç olarak, yapılandırmalar örneğin iPad'de büyük zorluklarla çalışır.

Böyle bir durumda, modal pencereleri kullanmadan 1C: Enterprise arabirimi seçeneği, 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, tarayıcılarda 1C: Enterprise'ın çalışmasına müdahale etmeyen diğer teknolojiler tarafından uygulanır.

Arayüzün yeni kipinde, daha önce kipli olan pencere, ana pencere içinde çizilir ve aynı şekilde web istemcisi arayüzünün geri kalanını engeller:

Sonuç olarak:

  • web istemcisinin performansını ve kararlılığını artıran yeni tarayıcı penceresi açılmaz;
  • Çoğu durumda ek özelleştirme 1C: Enterprise artık açılır pencereleri kullanmadığından tarayıcı 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 bir "sihirli değnek dalgası" ile çalıştırılamaz. Yeni engelleme pencereleri ile çalışma mantığını değiştirmek gerekiyor. Ancak iyi haber şu ki, bu değişiklikler zor değil ve programın tüm "şüpheli" kısımlarını kontrol etmek mümkün. Platform, geliştirme aşamasında tüm konfigürasyonun yeni mekanizmalar kullandığını ve kalıcı pencereler olmadan çalışacağını kontrol etmeyi sağlayan özel bir mekanizma uygular.

Bu tür pencerelerle çalışma mantığını değiştirme ihtiyacı, yeni arayüz çalışma modunun sadece 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 geliyor. Biri, bir engelleme penceresinin açılmasıyla biten ve ikincisi, kullanıcı bu pencereyi kapattığında yürütülecek. Sistemin program kodunu nerede yürütmeye devam edeceğini bilmesi için, kullanıcı bu pencereyi kapattığında yürütülmesi gereken prosedürün adı engelleme penceresine iletilir.

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 bir prosedür şöyle görünebilir:

Form için yeni sürümde FormMetin Girişi (bir engelleme penceresinde açılacaktır) özelliği ayarlamanız gerekir PencereAçık Modu değerinde BlockAllInterface ... Bu, kullanıcıya modalite sağlayacaktır:

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

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

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

Bir geliştiricinin modsal modda (istediği zaman) açabileceği formlara ek olarak, geliştiricinin isteğinden bağımsız olarak, veri girmek veya seçmek için her zaman modal formları açan gömülü dil yöntemleri vardır. Örneğin, yöntem Değer Girin () .

Bu tür yöntemleri modal olmayan modda kullanmak daha da kolaydır. Tüm bu yöntemler için, platform yinelenen yöntemler yapmıştır, onları çağırırken, kullanıcı pencereyi kapattıktan sonra yürütülecek prosedürün konumunu da belirtmeniz gerekir.

Örneğin, aşağıda eski yöntemin kullanımı gösterilmektedir. Değer Girin () ve yeni yedekleme yöntemi ShowEnterValues ​​​​() :

Listelenen durumlara ek olarak, bazı platform mekanizmalarının kullanıcı ile etkileşim kurmak için modal pencereleri de kullandığını söylemeliyim. Ve bu, geliştiricinin eylemlerine hiçbir şekilde bağlı değildir.

Bu nedenle, platformun bu tür tüm sistem diyalogları, çalışmanın modsal olmayan bir versiyonuna da aktarılır.

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

1C: Enterprise 8.3 platformundaki yapılandırma özelliklerinde, modaliteyi kullanmak için bir Mod vardır. Bu alanın değeri "Kullanma" ise, kalıcı bir pencere açmaya çalıştığınızda platform "Bu modda kalıcı pencerelerin kullanılması yasaktır" mesajını görüntüler. Bu, program kodunun yürütülmesini durdurur.

Bu makale, mod modu devre dışı bırakıldığında kullanıcıya bir soru örneği kullanarak program kodunu değiştirme mekanizmasını gösterir.

Zaman zaman bir yazılım ürünü geliştirirken, yapılması gereken işlemler hakkında kullanıcıya soru sorma ihtiyacı doğar. Örneğin, otomatik doldurma ile tablo bölümleri... PM'yi yeniden doldurmadan önce, kullanıcıya bunu yapma ihtiyacı hakkında soru sormak gerektiğinde. Ve cevabına bağlı olarak, PM temizlenecek ve yeniden doldurulacak veya doldurulmayacak.

Kodun soru içeren kısmı şöyle görünebilir:

Eğer PM. Miktar()< >0 Sonra Cevap = Soru (" // Bu satırda bir soru içeren kalıcı bir pencere görüntülenecek ve kullanıcı cevap verene kadar kod yürütme duracaktır. Cevap = DialogReturnCode ise. Hayır Sonra İade; EndIf; // Kullanıcı devam etmeyi kabul ettiÖĞLEDEN SONRA. Açık (); EndIf; // Daha fazla işlem yap // PM boşsa veya kullanıcı aşırı doldurma ile ilgili soruya olumlu yanıt verdiyse program buraya gelir Diğer Eylemleri Gerçekleştirme ();

Modal mod devre dışı bırakılırsa, bu kodun sorusuyla ilgili satırda bir hata oluşacak ve daha fazla yürütme kesintiye uğrayacaktır. Bunun nedeni, Soru işlevinin kalıcı bir pencere kullanmasıdır.

Bu durumda ShowQuestion yordamını kullanmanız gerekir. Bu prosedürü kullanırken, kullanıcının bir yanıt tamamlaması beklenmez. Ancak, bu prosedürün ilk parametresi, kullanıcının yanıtını izleyen uyarının açıklamasıdır.

Daha önce yazılan kod nasıl değişecek:

// PM'yi verilerle doldurmak gerekiyor // PM'yi doluluk için kontrol edin Eğer PM. Miktar()< >0 Sonra // PM boş değil, kullanıcıya taşma hakkında soru sormanız gerekiyor ShowQuestion (Yeni Açıklama Uyarısı (" TaşmaPTTamamlama", ThisObject, EkParametreler)," PM fazla doldurulacak. İlerlemek ?", Diyalog ModuSoru. Evet Hayır); // Bu satırda bir soru içeren bir pencere görüntülenecek, ancak kodun yürütülmesi durmayacak Aksi halde // PM boşsa program buraya gelecek PerformFurtherActions(); EndIf; // PM boş olsa da olmasa da program her durumda buraya gelecek // (tabii önceki kodda hata yoksa) . . . // Aynı modülde dışa aktarma prosedürü // Kullanıcı soruyu cevapladıktan sonra çağrılır& OnClient Prosedürü OverflowPOFCompletion (ResponseResult, EkParameters) ResponseResult = DialogReturnCode ise Dışa Aktar. Hayır O zaman // Kullanıcı devam etmeyi reddetti Dönüş ; EndIf; // Diğer işlemleri gerçekleştir // PM boş değilse ve kullanıcı aşırı doldurma ile ilgili soruya olumlu cevap verdiyse program buraya gelecektir.ÖĞLEDEN SONRA. Açık (); PerformFurtherActions(); Prosedürün Sonu

Bu nedenle ShowQuestion prosedürü yürütüldüğünde program durmayacağından, tüm olaylar dikkatli bir şekilde ele alınmalıdır.
Bu sorunu çözerken, iki olayda başka eylemlerin uygulanması gerçekleşebilir:
1. PM boşsa
2. PM boş değilse ve kullanıcı taşma sorusuna olumlu yanıt verdiyse

Ve buna göre, program kullanıcının yanıtını beklemekten vazgeçmediği için, bu olayların çağrısının kodun farklı bölümlerine dağıtılması gerekir.
Bu nedenle, kural olarak, PM'nin doluluk kontrolü yapıldıktan sonra yapılması gereken tüm gerçekleştirilen yöntemler ayrı bir prosedüre yerleştirilir.

Benzer kullanıcı etkileşimi işlevleri için benzer bir mekanizma kullanılır (SelectValue, SelectFrom List, vb.)

"Kalıcı pencerelerin bu modda kullanılması yasaktır" - bu hata şimdi 1C 8.3 platformunun yeni arayüzünün gelmesiyle 1C kullanıcılarını ve programcılarını rahatsız etmeye başlıyor - "".

1C teknolojik platformunun geliştiricileri, çözümlerini dünya yazılım geliştirme standartlarına göre standartlaştırarak zamana ayak uydurur. Tüm standartlar şu veya bu şekilde web sayfalarına yakın tek bir arayüze indirgenmiştir.

Modal ve açılır pencereler kötü biçim olarak kabul edilir ve yazılım geliştirmede uzun zamandır normal olmaktan çıkmıştır. Kullanıcılar "tek pencerede" çalışmaya alışkındır.

Özellikle sık sık bir modalite hatası görüyoruz. aşağıdaki yöntemler 1C:

  • Soru;
  • Bir uyarı;
  • Açık Değer.

Yeni taksi arayüzünün piyasaya sürülmesiyle, 1C 8 platformunun geliştiricileri doğru kararı verdi - uygulamalı çözümlerin geliştiricilerini yeni bir şekilde yeniden eğitmeye çalışmak. Yeni platforma "modalite kullanım modu" adı verilen bir özelliği dahil ettiler.

Sorun için hızlı düzeltme

Bunu çözmek için zamanınız yoksa ve bir sorunu hızlı bir şekilde çözmeniz gerekiyorsa, size basit ama tamamen doğru olmayan bir çözüm sunuyoruz. Hatayı hızlı bir şekilde düzeltmek için yapılandırma özelliklerinde modalite modunu değiştirmek yeterlidir.

Bunu yapmak için, modda sisteme giriş yapın, yapılandırmayı açın:

Açık konfigürasyonda, konfigürasyon köküne sağ tıklayarak ve "Özellikler"i seçerek içerik menüsünü çağırın:

267 1C video eğitimlerini ücretsiz edinin:

Konfigürasyon özellikleri açılacak, bodrum katında bizi ilgilendiren bir özellik var - "Modalite kullanım modu", "Kullan" modunu seçin:

Bundan sonra, "F7" tuşuna basarak değişiklikleri kaydedin ve uygulayın.

Sorunun doğru çözümü

Bu sorunu çözmenin doğru yolu, yapılandırmayı değiştirmek veya harici işleme yeni gereksinimler için.

Uyarı, soru, diyalog kutuları ve diğer modeller - tüm bunların yeni bir şekilde yeniden yazılması gerekiyor.

Modal olarak adlandırılan yerleşik operatörlerin, yinelenen işlevlerle değiştirilmesi gerekir.

Örneğin:

  • Uyarı - Uyarıyı Göster;
  • Soru - Soruyu Göster (ayrıntılı olarak -);
  • - Giriş Numaralarını Göster.

Aynı zamanda, özel bir nesne ortaya çıktı - Bildirim Açıklaması.

Değiştirme örneği:

Dizi = ""; EnterString (Dize, "Dize değerini girin") Rapor ("Girdiniz" + Dize);

Şununla değiştirilmelidir:

Dizi = ""; Uyarı Açıklaması = Yeni Uyarı Açıklaması ( "TestInputString", Bu form); ShowInputString (Uyarı Açıklaması, Dize, "Dize değerini girin") ;

Aynı zamanda, istemciye, değer kullanıcı tarafından girildiğinde çalışacak olan benzer bir prosedür ekleyin:

& OnClient Prosedürü TestInputString (ReceivedValue, PassedParameters) Export Report ("girdiğiniz" + String); Prosedürün Sonu

Konfigürasyon içinde geliştirilen formlar aynı şekilde açılır. Bildirimin açıklamasını ve bunun için gerekli yeni prosedürü belirterek "OpenFormModal" yöntemini "OpenForm" ile değiştirmek yeterlidir.

Açılan form tarafından çağrılan forma erişimi kapatmak için, form özelliğinde "WindowOpening Mode" özelliğinde "Lock Owner pencere" değerini belirtmeniz yeterlidir: