Komputery Okna Internet

Chrome korzystanie z okien modalnych w tym trybie jest zabronione. Co zrobić, jeśli „używanie okien modalnych w tym trybie jest zabronione”. Prawidłowe rozwiązanie problemu

Pomocnik składni dla tych poleceń wskazuje, że jeśli właściwość konfiguracji Tryb użytkowania zainstalowany w Nie używać, należy użyć innych poleceń w kodzie programu, takich jak PokażPytanie (), Pokaż ostrzeżenie (), PokażWprowadźNumery ():

Aby pracować z takimi sytuacjami, program 1C 8.3 udostępnia nowy obiekt systemowy „Opis alertu”, który służy do opisywania wywołania procedury modułu programu, gdy wystąpi oczekiwane zdarzenie, takie jak zamknięcie formularza lub niemodalnego okna dialogowego:

To spojrzenie na problem „od środka” dla tych, którzy chcą uporać się z pierwotną przyczyną. Przede wszystkim dla programistów 1C. Jak w tej sytuacji zwykli użytkownicy mogą naprawić błąd bez opracowywania? kod programu? Jest bardzo prosta metoda.

Instrukcje korekcji błędów dla zwykłych użytkowników

Krok 1. Zakończ pracę:

Krok 2. Wróć do menu startowego, aby uruchomić konfigurację. Wybieramy pozycję menu „Konfiguracja”:

Krok 3. Otwórz „Konfigurator”: na górnym panelu znajdujemy przycisk „Konfiguracja”, a na proponowanej liście wybierz menu „Otwórz konfigurację”:

Krok 4. Umieść kursor na Konfiguracja i kliknij prawym przyciskiem myszy, aby zadzwonić menu kontekstowe, w której wybieramy pozycję „Właściwości”:

Krok 5. Otwórz formularz „Właściwości”:

Krok 6. Znajdź wiersz „Tryb korzystania z modalności” (na dole listy):

Domyślnie program 1C 8.3 jest ustawiony na „Nie używaj”. Tłumaczymy wartość „Nie używaj” na wartość „Użyj”:

Wynik:

Jeśli błąd „Używanie okien modalnych w tym trybie jest zabronione” w 1C 8.3 zniknął, możesz dalej pracować. Zwykle tak się dzieje.

Ale jeśli błąd modalności w 1C pozostaje po wykonaniu wszystkich tych czynności, powinieneś skontaktować się z programistami, którzy obsługują i wspierają twój program 1C.

Jak pracować w interfejsie „Taxi”, jak dostosować miejsce pracy „dla siebie”, dostosować pasek nawigacyjny Ulubione, jak przeprowadzić wyszukiwanie pełnotekstowe, techniki pracy z czasopismami, przycisk „wybierz” w dokumentach, transfer linków do dokumentów, weryfikacji i innych funkcji w nowym interfejsie - tego wszystkiego dowiesz się z naszego wideo:

Aby uzyskać więcej informacji na temat prawidłowego i szybkiego organizowania nawigacji po programie 1C 8.3 przy użyciu nowego interfejsu TAXI, o nowych możliwościach korzystania ze znanych narzędzi, takich jak wbudowany kalkulator, kalendarz, porównywanie plików, przesyłanie linków do dokumentów współpracownikom, zobacz nasz kurs „”


Oceń ten artykuł:

Jeśli w trakcie kończenia lekcji masz taki błąd, bardzo łatwo go naprawić.

Wróć do konfiguratora i wybierz z menu "Konfiguracja" -> "Otwórz konfigurację":

W oknie, które się otworzy, kliknij kliknij prawym przyciskiem myszy na pozycji „Konfiguracja” i z rozwijanego menu wybierz pozycję „Właściwości”:

Otworzy się okno z właściwościami konfiguracji (po prawej):

Przewiń na sam dół i znajdź tam element „Sposób korzystania z modalności”:

Ustaw jego wartość na "Posługiwać się":

Uwaga! Pamiętaj, że jeśli używasz platformy 1C, która różni się od tej, którą pobraliśmy w pierwszej lekcji (późniejsza wersja), pojawi się również pole „Tryb korzystania z połączeń synchronicznych ...”. Musi być również ustawiony na „Użyj”.

Na koniec wybierz element menu „Konfiguracja” -> „Zapisz konfigurację”:

Gotowy! Teraz błąd już się nie pojawi.

Poniższe wyjaśnienia są dla tych, którzy są zainteresowani tym, co zrobiliśmy.

W naszej konfiguracji włączyliśmy tryb korzystania z modalności. Domyślnie ten tryb jest wyłączony i nie pozwala na korzystanie z takich poleceń jak EnterNumber, EnterString, EnterDate, OpenValue.

Chodzi o to, że te polecenia są modalne. Wywołanie ich prowadzi do tego, że przed użytkownikiem pojawia się okno (na przykład do wprowadzania informacji), które blokuje możliwość pracy z programem do momentu zamknięcia okna.

A ponieważ obecność takich okien jest wyjątkowo niepożądana podczas pracy z 1C za pośrednictwem przeglądarki internetowej, podczas opracowywania nowych konfiguracji tryb modalności jest domyślnie wyłączony.

Możemy to śmiało zawrzeć, ponieważ piszemy przykłady edukacyjne, które nie są przeznaczone do pracy w Internecie.

Artykuł rozważy główne powody rezygnacji z modalności na platformie 1C: Enterprise oraz główne metody konwersji sekcji kodu na nowy model asynchroniczny.

Zastosowanie

Artykuł omawia asynchroniczny model budowania logiki biznesowej, dodaną platformę „1C: Enterprise” w wersji 8.3. Podane informacje dotyczą aktualnych wersji platformy.

Odmowa użycia okien modalnych na platformie 1C: Enterprise 8.3

Podczas opracowywania konfiguracji na platformie 1C: Enterprise 8 istnieje potrzeba okresowego zawieszenia działania programu, dopóki użytkownik nie podejmie decyzji lub wykona jakąkolwiek czynność.

Np. po kliknięciu przycisku wypełniania sekcji tabelarycznej należy zapytać użytkownika, czy konieczne jest wyczyszczenie sekcji tabelarycznej, aby wcześniej wprowadzone dane nie zostały utracone.

Takie zachowanie może być zapewnione na przykład przez następujący kod:

& Na kliencie
Procedura WypełnijProdukty(Komenda )
Odpowiedź = Pytanie („Sekcja stołu zostanie wyczyszczona. Kontynuować?”, Pytanie trybu dialogowego Tak Nie);
Jeśli odpowiedź = Kod zwrotny okna dialogowego. Tak Następnie
// algorytm wypełniania
EndIf;
Koniec procedury

W wyniku działania tego fragmentu kodu wykonanie kodu programu zostanie zawieszone, na ekranie pojawi się pytanie, interfejs aplikacji, oprócz dialogu z pytaniem, stanie się niedostępny, system czeka na decyzję użytkownika wykonanie kodu będzie kontynuowane dopiero po udzieleniu odpowiedzi na pytanie.

Również otwieranie okien modalnych poprzez wywołanie metody OpenModal() prowadzi do zawieszenia wykonywania kodu i zablokowania interfejsu.

Podczas pracy z konfiguracją w trybie klienta internetowego przez przeglądarkę, w tym przypadku otworzy się nowe okno - wyskakujące okienko, które zablokuje nie tylko bieżącą kartę, ale także cały interfejs przeglądarki, w tym resztę Otwórz okna i zakładki.

Wyskakujące okienka w Internecie są często wykorzystywane do złośliwego rozpowszechniania niechcianych reklam, dlatego przeglądarki zawierają funkcje blokowania wyskakujących okienek.

W takim przypadku, aby pracować z konfiguracjami 1C: Enterprise 8 za pośrednictwem przeglądarki, konieczne jest wyłączenie blokowania wyskakujących okienek.

Problemy pojawiają się również podczas pracy nad urządzenia mobilne... Na przykład modalności nie są obsługiwane na iPadzie.

Aby rozwiązać te problemy, powinieneś używać okien blokujących zamiast modalnych. Dla użytkownika wizualnie wszystko wygląda tak samo: okno blokuje interfejs klienta WWW.

Jednak okno blokowania jest „narysowane” nad oknem głównym i tylko bieżąca karta przeglądarki, w której konfiguracja jest otwarta, jest zablokowana, co pozwala na przełączanie się do innych kart, ponieważ w tym przypadku nie są używane modalne okna przeglądarki .

Dzięki temu wyskakujące okna w przeglądarce nie otwierają się i działają za pośrednictwem klienta internetowego na urządzeniach mobilnych.

Główny element konfiguracji ma właściwość „Tryb korzystania z modalności”, która określa, czy w konfiguracji można otwierać okna modalne.

W przypadku wybrania opcji „Użyj” można otwierać okna modalne. W przypadku wybrania opcji „Nie używaj” modyfikacje są nieprawidłowe. Podczas próby wywołania metody, która otwiera okno modalne, system wyświetla komunikat o błędzie:

Przy tej wartości właściwości „Tryb korzystania z modalności” dozwolone są tylko okna blokujące.

Jeżeli zaznaczona jest opcja „Użyj z ostrzeżeniami”, to po otwarciu okien modalnych w oknie komunikatu wyświetlany jest następujący tekst:

Ten wariant pracy może być wykorzystany jako pośredni podczas przerabiania konfiguracji w celu odmowy użycia okien modalnych.

Główna różnica między oknami blokującymi a oknami modalnymi polega na tym, że otwarcie okna blokującego nie wstrzymuje wykonywania kodu.

Dlatego programiści będą musieli przepisać kod, który używa modów, mając na uwadze tę funkcję.

Kod należy podzielić na dwie części:

  • otwarcie okna blokującego;
  • obsługa wyboru użytkownika.

Fragment kodu na początku artykułu należy przepisać w następujący sposób:

& Na kliencie
Procedura WypełnijProdukty(Komenda )
Alert = Nowy Opis Alerty(, TenObiekt);

Pytanie trybu dialogowego Tak Nie);
Koniec procedury
& Na kliencie
Procedura (wynik, Dodatkowe opcje) Eksport
Jeśli wynik = Kod zwrotny okna dialogowego. Tak Następnie
// algorytm wypełniania
EndIf;
Koniec procedury

Po wykonaniu procedury ShowQuestion() system nie zatrzymuje się, czekając na odpowiedź użytkownika, kod kontynuuje wykonywanie.

Użytkownik będzie mógł dokonać wyboru dopiero po zakończeniu całej procedury. Spowoduje to wywołanie procedury eksportu FillProductsQuestionCompletion (). Przekazaliśmy jego nazwę do konstruktora obiektu Alert Description.

Procedura, która zostanie wywołana po dokonaniu wyboru, może znajdować się w module formularza, module poleceń, wspólnym module nieglobalnym.

W powyższym przykładzie wywoływana procedura znajduje się w module formularza zarządzanego, więc przekazaliśmy thisObject do parametru.

Rozważ wywołanie procedury znajdującej się we wspólnym module. Aby to zrobić, dodaj nowy wspólny moduł ProcessingNotifications, ustaw dla niego flagę „Klient (aplikacja zarządzana)” i nie ustawiaj flagi „Globalny”. Umieść procedurę FillProductsQuestionCompletion() w tym module.

Wtedy obsługa poleceń wypełnienia będzie wyglądać tak:

& Na kliencie
Procedura WypełnijProdukty(Komenda )
Alert = Nowy Opis Alerty(„WypełnijProduktyPytanieWykończenie”,
Przetwarzanie powiadomień);
QuestionText = „Sekcja tabeli zostanie wyczyszczona. Przystępować?" ;
Pokaż pytanie (alert, tekst pytania, Pytanie trybu dialogowego Tak Nie);
Koniec procedury

Po wywołaniu dowolnej metody otwierającej okno blokujące, procedura musi zostać zakończona, a wykonywany dalej kod powinien znajdować się w procedurze, która zostanie wywołana po zamknięciu okna.

Aby przenieść kontekst (dane pomocnicze, niektóre parametry, wartości zmiennych) z procedury otwierającej okno modalne do procedury, która jest wywoływana w momencie jego zamknięcia, podawany jest trzeci opcjonalny parametr konstruktora obiektu DescriptionNotifications - AdditionalParameters.

Ten obiekt (dowolnego typu) zostanie przekazany do procedury opisanej w AlertDescription jako ostatni parametr.

Korzystając z przykładu powyższej sekcji kodu, można to zrobić w następujący sposób:

& Na kliencie
Procedura WypełnijProdukty(Komenda )
Parametr1 = 0;
Parametr2 = 0;
Lista parametrów= Nowa struktura („Parametr1, parametr2 ″, parametr1, parametr2);
Alert = Nowy Opis Alerty(„WypełnijProduktyPytanieWykończenie”, TenObiekt,
Lista parametrów);
ShowQuestion (Alert, „Sekcja stołu zostanie wyczyszczona. Kontynuować?”,
Pytanie trybu dialogowego Tak Nie);
Koniec procedury
& Na kliencie
Procedura WypełnijProduktyPytanieWykończenie(Wynik , Dodatkowe opcje) Eksport
Jeśli wynik = Kod zwrotny okna dialogowego. Tak Następnie
// parse AdditionalParameters.Parameter1
// parsuj AdditionalParameters.Parameter2
EndIf;
Koniec procedury

Jeśli chcesz przekazać tylko jedną wartość, nie można użyć struktury, ale przypisz tę wartość do parametru AdditionalParameters konstruktora obiektu DescriptionAlerts.

Spójrzmy na kilka przykładów pracy z blokowaniem okien.

Zadanie 1. Otwarcie kolejnego formularza

Z formularza dokumentu, klikając przycisk „Otwórz parametry”, należy otworzyć formularz, na którym znajdują się dwa pola wyboru Parametr1 i Parametr2, które musi ustawić użytkownik. Po zamknięciu formularza wyślij wartości parametrów do wiersza wiadomości.

Tworzymy ogólny formularz „Parameters Form”, na którym umieszczamy parametry Parameter1 i Parameter2 oraz polecenie CloseForm:

Program obsługi poleceń wygląda tak:

Program obsługi poleceń wygląda tak: & OnClient
Procedura CloseForm (polecenie)
Lista parametrów= Nowa struktura ( „Parametr1, Parametr2”, parametr1, parametr2);
Blisko ( Lista parametrów); Koniec procedury

Dla formularza ustaw właściwość WindowOpening Mode na „Zablokuj cały interfejs”:

W formularzu dokumentu umieść polecenie OpenParameters, którego procedura obsługi jest opisana w następujący sposób:

& Na kliencie
Procedura Otwórz parametry(Komenda )
Alert = Nowy Opis Alerty("Uzupełnianie parametrów otwartych", TenObiekt);
Otwórz formularz ( "Ogólny.ParametrForm",,,,,, Notyfikacja);
Koniec procedury
& Na kliencie
Procedura Wypełnianie parametrów otwartych(Wynik , Dodatkowe opcje) Eksport
Jeśli TypeZnch (Wynik) = Typ ("Struktura") Wtedy
Dla każdej kluczowej wartości z cyklu wyników
Wiadomość = Nowa Wiadomość do użytkownika;
Message.Text = „Klucz:„ ” „+ KluczWartość.Klucz +” „”, wartość = "
+ Wartość klucza Wartość;
Wiadomość.Informacja();
Koniec cyklu;
EndIf;
Koniec procedury

W trybie użytkownika, uruchamiając konfigurację pod klientem webowym, otrzymujemy następujące wyniki pracy:

Kliknij na zdjęcie, aby powiększyć.

Tryb otwierania okna można również określić w ostatnim parametrze procedury OpenForm.

& Na kliencie
Procedura Otwórz parametry(Komenda )
Alert = Nowy Opis Alerty("Uzupełnianie parametrów otwartych", TenObiekt);
Otwórz formularz ( "Ogólny.ParametrForm",,,,,, Alarm,
ModeOpenWindowForms.LockAllInterface
);
Koniec procedury

Zadanie 2. Pytanie przy zamykaniu formularza

Zamykając okno przetwarzania, zapytaj użytkownika, czy naprawdę chce zamknąć okno.

To zadanie można rozwiązać za pomocą następującego kodu znajdującego się w module przetwarzania formularza:

& Na kliencie
Reszta PotrzebujeszZamknijFormularz;
& Na kliencie
Procedura BeforeClose (Zastrzeżenie, Przetwarzanie standardowe)
Jeśli nie PotrzebujeszZamknijFormularz= Prawda Wtedy
Odmowa = Prawda;
Alert = Nowy Opis Alerty(„Przed zamknięciem Zakończenie”, TenObiekt);
ShowQuestion (Alert, „Czy na pewno chcesz zamknąć okno?”,
Pytanie trybu dialogowego Tak Nie
);
EndIf;
Koniec procedury
& Na kliencie
Procedura PrzedZamknijZakończeniem(Wynik , Dodatkowe opcje) Eksport
Jeśli wynik = Kod zwrotny okna dialogowego. Tak Następnie
PotrzebujeszZamknijFormularz= Prawda;
Blisko ();
Inaczej
PotrzebujeszZamknijFormularz= Nieokreślony;
EndIf;
Koniec procedury

W procedurze Przed zamknięciem formularza użytkownikowi zadawane jest pytanie, flaga Odmowa jest ustawiana na Prawda, a formularz jest zamykany.

Po twierdzącej odpowiedzi na pytanie zmienna MustCloseForm jest ustawiona na True, formularz jest ponownie zamykany.

Zadanie 3. Wprowadzanie wartości liczbowej

Po kliknięciu przycisku w formularzu przetwarzania otwórz standardowe okno dialogowe do wprowadzania numeru.

Aby to zrobić, użyj metody ShowNumberEnter () zamiast ofNumberEnter (), która otwiera okno blokujące zamiast modalnego.

& Na kliencie
Procedura wprowadzania numeru (polecenie)
Alert = Nowy Opis Alerty(„Wprowadź numer uzupełnienia”, TenObiekt);
PokażWprowadźNumery(Ogłoszenie, 0, „Wpisz kwotę”, 15, 3);
Koniec procedury
& Na kliencie
Procedura WprowadźNumeryUkończenie(Wynik , Dodatkowe opcje) Eksport

Wiadomość = Nowa Wiadomość do użytkownika;
Message.Text = „Wprowadziłeś ilość” + Wynik;
Wiadomość.Informacja();
EndIf;
Koniec procedury

Po zamknięciu okna do wpisania liczby zostanie wywołana procedura, której pierwszym parametrem zostanie przekazana wpisana liczba lub wartość Undefined jeśli użytkownik odmówił wejścia.

Zadanie 4. Wybór koloru

Klikając przycisk na formularzu przetwarzania przy użyciu standardowego okna dialogowego wyboru koloru, użytkownik określa żądany kolor. Ustaw ten kolor na tle naciśniętego przycisku.

Dodaj polecenie SelectColor do formularza z następującym uchwytem:

& Na kliencie
Procedura wyboru koloru (polecenie)
DialogWybierz kolory= Nowy DialogWybierz kolory;
Alert = Nowy Opis Alerty("Wybierz kolor dokończenia", TenObiekt);
DialogWybierz kolory. Pokaż powiadomienie);
Koniec procedury
& Na kliencie
Procedura WybórKoloryZakończenie(Wynik , Dodatkowe opcje) Eksport
Jeśli NIE Wynik = Niezdefiniowany Wtedy
Elementy.Kolor.KolorTło= Wynik;
EndIf;
Koniec procedury

W przypadku obiektów ColorSelectDialogue (a także StandardPeriodEdit Dialogue, FormatString Constructor, RegularJobScheduleDialogue, FontSelection Dialogue) metoda Show () otwiera okno blokowania.

Po zamknięciu okna zostanie wywołana procedura, której pierwszym parametrem zostanie przekazana wybrana wartość (kolor, czcionka itp.) lub wartość Niezdefiniowana, jeśli użytkownik anulował wybór.

Należy zauważyć, że obiekt FileSelectDialog nie ma metody Show (), w przeciwieństwie do okien dialogowych wyboru koloru lub czcionki, ponieważ implementacja tych okien dialogowych jest znacząco różna.

Aby użyć okna dialogowego wyboru pliku w kliencie sieciowym, musisz najpierw połączyć rozszerzenie pliku.

Okna dialogowe zaimplementowane przez rozszerzenie pliku nie stwarzają takich problemów w działaniu, jak okna modalne przeglądarek, dlatego nie zaimplementowano otwierania okien blokujących dla obiektu FileChoiceDialog.

Podsumowując, zauważamy, że od wersji 8.3.10 obsługa okien modalnych została przerwana w kliencie sieciowym. W takim przypadku, jeśli w konfiguracji zostanie wywołana metoda modalna, zostanie zgłoszony wyjątek. Ponadto w kliencie sieciowym zaprzestano obsługi trybu interfejsu. W osobnych oknach... Ponadto nie jest już możliwe otwieranie formularza w osobnym oknie zarówno w kliencie uproszczonym, jak i internetowym (podczas pracy w trybie interfejsu zakładek). Tak drastyczne kroki pozwoliły zrezygnować z trybu interfejsu, który nie jest już obsługiwany przez wszystkie nowoczesne przeglądarki.

Jakie praktyczne wnioski można wyciągnąć z tych informacji? A wniosek jest dość prosty - jeśli z jakiegoś powodu w Twojej konfiguracji nadal istnieją wywołania modalne, to w tych miejscach w kliencie WWW wyświetli się okno z komunikatem o błędzie. Ostrzegam przed próbami "googlowania" szybkiego rozwiązania tego problemu, ponieważ większość porad sprowadza się do następującego przepisu: w konfiguratorze na poziomie konfiguracji ustaw właściwość „Modality use mode” na wartość „Use”. Oczywiście w ten moment, to nie zadziała tylko dlatego, że nowoczesne przeglądarki nie obsługują już połączeń modalnych.

A masz tylko dwa sposoby na rozwiązanie opisanego powyżej problemu:

  1. Zaktualizuj platformę do wersji 8.3.10+ (8.3.11), ustaw właściwość konfiguracji „Tryb zgodności” na „Nie używaj” i przepisz fragmenty kodu, które używają metod modalnych, do modelu asynchronicznego do budowania logiki biznesowej
  2. Polecaj swoim klientom korzystanie z przestarzałych przeglądarek, w których nadal obsługiwane były wywołania modalne ( Mozilla Firefox wersja 37 i starsza, Chrome starsza wersja 37 itd.).

Nawiasem mówiąc, począwszy od wersji 8.3.11 przeglądarki internetowe firmy Microsoft nie są już obsługiwane Internet Explorer wersje 8 i 9.

Z przeglądarkami internetowymi w świetle modalności doszliśmy do wniosku, że teraz czas wyjaśnić sytuację z resztą klientów.

Począwszy od wersji 8.3.5 właściwość „Tryb korzystania z modalności” w cienkich i grubych klientach jest brana pod uwagę tylko wtedy, gdy określono parametr wiersza polecenia / EnableCheckModal. Ten parametr jest automatycznie zastępowany do wiersz poleceń tylko podczas uruchamiania aplikacji z konfiguratora. Jeśli ten parametr nie zostanie określony, nie są generowane żadne wyjątki, a odpowiednie ostrzeżenia nie są wyświetlane. Te. w praktyce w przypadku korzystania z grubego i cienkiego klienta nie obserwuje się radykalnych zmian w pracy przy korzystaniu z trybu modalności - wywołania modalne będą działały tak samo jak wcześniej, bez ostrzeżeń, jak w kliencie webowym.

Kropką nad „i” należy zauważyć, że począwszy od wersji 8.3.9 gruby klient ignoruje właściwość konfiguracji „Tryb używania synchronicznych wywołań do rozszerzeń platformy i komponentów zewnętrznych”, podczas gdy odpowiednie metody synchroniczne działają bez zgłaszania wyjątków i wyświetlania ostrzeżeń . Określona ignorowana właściwość została dodana w wersji 8.3.5, aby obsługiwać asynchroniczną pracę z komponentami zewnętrznymi, kryptografią i rozszerzeniami do pracy z plikami w przeglądarce internetowej Google Chrome... Jasne jest, że nie ma to nic wspólnego z grubym klientem, dlatego „ciche” ignorowanie tej właściwości po prostu wyeliminowało niepotrzebne kontrole użycia metod synchronicznych podczas korzystania z konfiguracji.

Przy okazji! W związku z tym, że platforma śmiało zmierza w stronę sieci, od wersji 8.3.8 programiści wprowadzili pewne ograniczenia w kodzie programu, który wiąże się z logiką zamykania formularza lub aplikacji, wykonywanej w grubych i cienkich klientach. Koniecznie przeczytaj nasz artykuł szczegółowo omawiający ten niuans. Ponadto na kursie „Profesjonalny rozwój interfejsów i formularzy w 1C: Enterprise 8.3” znajduje się rozdział poświęcony odrzuceniu modalności i można uzyskać wiele przydatnych i istotnych informacji na ten temat.

Koledzy, są dwie rzeczy, które można czytać bez końca: kanał VKontakte i lista zmian w kolejnym wydaniu platformy, więc podsumujmy ;)

Przyglądając się przykładom, które pozwalają przejść od elementów modelu synchronicznego do modelu asynchronicznego, zapewne już zauważyłeś, że w ogólnym przypadku kodu jest więcej. Im więcej kodu, tym większa złożoność jego dalszego utrzymania i debugowania.

Ponadto ilość kodu wzrośnie jeszcze bardziej, jeśli w procesie rozwoju użyjemy więcej dialogów. Dlatego w procesie tworzenia rozwiązań aplikacyjnych skoncentrowanych na pracy w kliencie webowym należy pamiętać o paradygmacie pracy, który jest obecnie stosowany w nowoczesnych aplikacjach webowych. Dlatego też, jeśli twoja konfiguracja ma dużo interaktywnych okien dialogowych z użytkownikiem, wystawionych ostrzeżeń, to sensowne jest zrewidowanie tej funkcjonalności na korzyść innych podejść do organizacji interakcji z użytkownikiem.

Zamiast konkluzji

Tak więc nasz cykl „Pierwsze kroki w rozwoju na 1C” dobiegł końca. Jeśli przeczytałeś ją w całości, to najprawdopodobniej zauważyłeś już, z jakimi zawrotami i zawirowaniami platforma się ostatnio rozwijała. Materiał do tego cyklu powstał stosunkowo niedawno, ale musieliśmy go poważnie zaktualizować, ponieważ nawet w tak krótkim czasie wiele nowych ważnych funkcjonalność i zmiany. Tak duże zmiany mogą nieco wprawić w zakłopotanie programistę 1C, jeśli przez cały ten czas nie dorósł i nie rozwinął się zawodowo z platformą.

W wyspecjalizowanych zasobach internetowych często można przeczytać prośby początkujących programistów i ich bardziej dojrzałych kolegów, aby doradzić im materiały, które pomogłyby im zrozumieć ogromne, a czasem pozornie nieskończone możliwości platformy 1C. Tradycyjnie zalecamy zwrócenie uwagi na nasze kursy programowania

14
Aby wymusić uruchomienie przedsiębiorstwa w aplikacji Normal lub Managed, używane są następujące klucze: / RunModeOrdinaryApplication uruchamia grubego klienta w trybie normalnym, pomimo ustawień konfiguracyjnych i ... 3
Konieczne jest, aby użytkownicy nie mogli zmieniać skonfigurowanego dla nich interfejsu! Rozwiązanie: Aby go wyłączyć, musisz usunąć prawo „Zapisz dane użytkownika” w prawach dostępu głównego elementu konfiguracji. ... 2
W bieżącej pracy użytkownik zwykle otwiera kilka obiektów. Może to być dokument, informator, raport itp. W poprzednim interfejsie nie było problemu z szybkim znalezieniem otwartego obiektu i zaktualizowaniem go dla... 2
W ostatnim artykule: Instalowanie klasyfikatora adresów (KLADR) w 1C, powiedziałem ci, czym jest Kladr i jak załadować go do zwykłych formularzy 1C (8.0-8.2). W tym artykule pokażę, jak załadować klasyfikator adresów (KLADR) w ... 2
Często podczas opracowywania określonej konfiguracji użytkownicy chcą dołączyć zdjęcia do pozycji katalogu i przechowywać je w bazie danych. W tym artykule opowiem Ci, jak połączyć obiekty budowlane z książką referencyjną ...

W platformie 1C pojawiła się wersja 8.3 nowy reżim praca programu - bez użycia modalności. Dokładniej, pojawiły się 2 nowe tryby: bez użycia modalności i z użyciem modalności, ale z ostrzeżeniem. A stary tryb działania oznacza, jak korzystać z modalności.

Co to wszystko znaczy? We wczesnych wersjach platformy używaliśmy różnych okien modalnych i tak naprawdę o tym nie myśleliśmy. Na przykład musisz wyświetlić ostrzeżenie dla użytkownika, zadać pytanie, wprowadzić jakąś wartość lub wybrać plik. To są wszystkie okna modalne.

Co oznacza modalny? Oznacza to, że gdy to okno jest wywołane, nakłada się na wszystkie inne okna, to znaczy jest przenoszone na samą górę i bloki działają z innymi oknami do końca pracy z tym oknem. Oprócz blokowania okien wykonanie kodu zatrzymuje się dokładnie w miejscu wywołania tego okna, a kontynuacja wykonywania kodu następuje dopiero po zamknięciu takiego okna. Od miejsca, w którym zatrzymano egzekucję. Wywołanie okna modalnego zilustruję przykładem wywołania formularza wyboru okresu:

& Na kliencie

Przetwarzanie standardowe = Fałsz;




Jeśli Dialog.Edit () Następnie // Wywołaj formularz modalny. Kontynuacja wykonywania kodu nastąpi dopiero po zamknięciu formularza.
Elements.Services.CurrentData.StartDate = Dialog.Period.StartDate;
Elements.Services.CurrentData.EndDate = Dialog.Period.EndDate;
EndIf;

Koniec procedury


Jak widać, do przetworzenia wywołania okna modalnego wyboru okresu wystarczy jedna procedura.

Dlaczego modalności są złe? Zastanówmy się teraz, dlaczego 1C zdecydował się zrezygnować z używania okien modalnych. Cóż, przede wszystkim wynika to z faktu, że platforma 1C może być używana nie tylko w zwykłej formie - w postaci aplikacji komputerowej, ale można ją również uruchomić w przeglądarce i można ją uruchomić w formie aplikacji mobilnej.

Problem z przeglądarkami jest następujący. Modalność okien w nich jest realizowana za pomocą wyskakujących oddzielnych okien przeglądarki. Obsługiwane są przez prawie wszystkie przeglądarki, ale ze względu na częste wykorzystywanie takich okien do reklam, prawie wszyscy twórcy przeglądarek zmagają się z nimi i domyślnie wyłączają korzystanie z takich okien. W rezultacie, aby zapewnić możliwość pracy użytkownika 1c w przeglądarce, musisz zmusić go do zezwolenia na te okna, poświęcić się wszystkim subtelnościom 1c i przeglądarek i ogólnie przeciążać niepotrzebnymi informacjami.

Oddzielny niuans z przeglądarkami dla komputery typu tablet i przeglądarki na telefony. W większości przypadków te przeglądarki nie obsługują wyskakujących okienek. Interfejsy (monitory i urządzenia wejściowe) takich urządzeń z wyskakującymi oknami nie są kompatybilne.

I w końcu mobilna aplikacja 1C również nie zaprzyjaźnił się z oknami modalnymi.

Stąd wniosek: nie używaj modali. A czego użyć zamiast nich? Zamiast tego musisz używać tych samych okien, ale bez trybu modalności. W nowej platformie 1C opracował również taki tryb dla każdego okna. Jest zaimplementowany jako osobna metoda dla każdego okna dialogowego. Ten tryb pozwala na wywołanie okna, ale nie zatrzymuje wykonywania kodu programu. Technicznie rzecz biorąc, w przeglądarkach jest to zaimplementowane jako pseudookno, które pojawia się w oknie nadrzędnym, ale nakłada się na nie. Fakt, że kod nadal wykonuje się po otwarciu okna, oznacza, że ​​nie można uzyskać wybranych w nim wartości bezpośrednio po wywołaniu kodu okna. Nie zostały jeszcze wybrane. Dlatego odbiór i przetwarzanie tych wartości odbywa się w osobnej procedurze, która jest wywoływana przy zamknięciu takiego okna i ta procedura jest określona przy wywołaniu metody otwierania okna. Spójrzmy na przykład tego samego okna wyboru okresu.

& Na kliencie
Procedura serwisowaStartDateSelectionStart (pozycja, dane wyboru, przetwarzanie standardowe)

Przetwarzanie standardowe = Fałsz;

Okno dialogowe = Okno dialogowe New EditStandardPeriod ();
OkresStandardowy = Nowy OkresStandardowy ();

DataRozpoczęcia = Pozycje.Usługi.CurrentData.DataRozpoczęcia;
Data Końcowa = Items.Services.CurrentData.EndDate;

StandardPeriod.StartDate = StartDate;
OkresStandardowy.DataZakończenia = DataZakończenia;
Dialog.Okres = StandardowyOkres;

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

Dialogu.Show (Opis alertu)

Koniec procedury

& Na kliencie
Procedura przetwarzaniaWybór okresu (okresu, parametrów) Eksport

Jeśli okres<>Niezdefiniowane wtedy

Items.Services.CurrentData.StartDate = Okres.DataRozpoczęcia;
Items.Services.CurrentData.EndDate = Okres.Data zakończenia;

EndIf;

Koniec procedury


Jak widać, zamiast Edit() wywoływane jest Show(). A przetwarzanie zdarzenia selekcji jest już w innej procedurze.

Więc wymyśliliśmy, jak obejść się bez modalności. Teraz zastanówmy się, do czego służy tryb korzystania z modalności z ostrzeżeniem. W rzeczywistości jest to taki przejściowy reżim. Kiedy nie miałeś jeszcze czasu na przerobienie całej konfiguracji dla trybu bez użycia modalności, ale już do tego dążysz. I za każdym razem, gdy wywoływane jest okno modalne, program wyświetli ostrzeżenie, że nie jest pożądane wywoływanie okien modalnych w tym trybie.

Cóż, porzucamy modalność i opanowujemy nowe technologie do pracy 1C w przeglądarkach i komputerach mobilnych.