Konfigurowanie sprzętu i oprogramowania

Stosowanie metod synchronicznych na kliencie jest zabronione. Dlaczego pojawia się błąd „Używanie metod synchronicznych na kliencie jest zabronione”? Praca z plikami w kliencie WWW

Dlaczego pojawia się błąd „Używanie metod synchronicznych na kliencie jest zabronione”?

Jeśli podczas przechodzenia lekcji napotkasz taki błąd, bardzo łatwo go naprawić.

Wróć do konfiguratora i wybierz punkt menu „Konfiguracja” -> „Otwórz konfigurację”:

W oknie, które zostanie otwarte, kliknij prawym przyciskiem myszy element „Konfiguracja” i z menu, które zostanie otwarte, wybierz „Właściwości”:

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

Przewiń na sam dół i znajdź tam pozycję „Tryb modalny”:

Ustaw jego wartość na "Używać":

Uwaga! Pamiętaj, że jeśli używasz platformy 1C innej niż ta, którą pobraliśmy w pierwszej lekcji (nowsza wersja), będziesz mieć również pole „Tryb korzystania z połączeń synchronicznych…”. Należy go również ustawić na „Użyj”.

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

Gotowy! Teraz błąd już nie będzie występował.

Wyjaśnienia poniżej - dla zainteresowanych tym, co zrobiliśmy.

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

Faktem jest, że te polecenia są modalne. Wywołanie ich powoduje wyświetlenie przed użytkownikiem okna (np. do wprowadzenia informacji), które blokuje możliwość pracy z programem do czasu 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.

W artykule omówione zostaną główne powody rezygnacji z modalności na platformie 1C:Enterprise oraz główne metody konwersji sekcji kodu do nowego modelu asynchronicznego.

Możliwość zastosowania

W artykule omówiono asynchroniczny model konstruowania logiki biznesowej, dodaną platformę „1C:Enterprise” w wersji 8.3. Przedstawione informacje dotyczą bieżących wydań platformy.

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

Podczas opracowywania konfiguracji na platformie 1C:Enterprise 8 pojawia się okresowa potrzeba wstrzymywania programu do czasu podjęcia przez użytkownika decyzji lub wykonania jakiejś akcji.

Przykładowo po kliknięciu przycisku wypełnienia sekcji tabelarycznej użytkownik powinien zostać zapytany, czy należy wyczyścić sekcję tabelaryczną, aby nie utracić wcześniej wprowadzonych danych.

Takie zachowanie można osiągnąć na przykład za pomocą następującego kodu:

&Na kliencie
Procedura Wypełnij Produkty(Zespół )
Odpowiedź = Pytanie („Część tabeli zostanie wyczyszczona. Kontynuować?”, Tryb dialogu Pytanie. Tak Nie);
Jeśli odpowiedź = Dialogowy kod zwrotny.Tak Następnie
//algorytm wypełniania
KoniecJeśli ;
Koniec procedury

W wyniku pojawienia się tego fragmentu kodu wykonanie kodu programu zostanie wstrzymane, na ekranie wyświetli się pytanie, interfejs aplikacji poza oknem dialogowym z pytaniem stanie się niedostępny, system oczekuje na dokonanie przez użytkownika decyzji, a wykonanie kodu będzie kontynuowane dopiero po udzieleniu odpowiedzi na pytanie.

Otwarcie okien modalnych poprzez wywołanie metody OpenModal() powoduje również przerwy w wykonywaniu kodu i zablokowanie interfejsu.

Podczas pracy z konfiguracją w trybie klienta WWW 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 inne otwarte okna i karty.

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, musisz wyłączyć blokowanie wyskakujących okienek.

Problemy pojawiają się także podczas pracy na urządzeniach mobilnych. Na przykład okna modalne nie są obsługiwane na iPadzie.

Aby rozwiązać te problemy, zamiast okien modalnych należy zastosować okna blokujące. Dla użytkownika wizualnie wszystko wygląda tak samo: okno blokuje interfejs klienta WWW.

Jednak okno blokujące jest „rysowane” na górze okna głównego i blokowana jest tylko bieżąca zakładka przeglądarki, w której otwarta jest konfiguracja, co pozwala na przełączanie się na inne zakładki, ponieważ modalne okna przeglądarki nie są używane.

Dzięki temu wyskakujące okienka nie otwierają się w przeglądarce i zapewniona jest praca przez klienta sieciowego na urządzeniach mobilnych.

Element główny konfiguracji posiada właściwość „Tryb modalny”, która określa, czy w konfiguracji można otwierać okna modalne.

Jeżeli zostanie wybrana opcja „Użyj”, wówczas będzie można otworzyć okna modalne. W przypadku zaznaczenia opcji „Nie używaj” okna modalne nie są dozwolone. Przy próbie wywołania metody otwierającej okno modalne system wyświetla komunikat o błędzie:

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

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

Tę opcję pracy można wykorzystać jako opcję pośrednią przy przeróbce konfiguracji w celu rezygnacji z używania 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 programu korzystającego z okien modalnych, aby uwzględnić tę funkcję.

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

  • otwarcie okna blokującego;
  • przetwarzanie wyboru użytkownika.

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

&Na kliencie
Procedura Wypełnij Produkty(Zespół )
Alarm = Nowość OpisAlerty(, TenObiekt);

Tryb dialogu Pytanie. Tak Nie);
Koniec procedury
&Na kliencie
Procedura (wynik, Dodatkowe opcje) Eksport
Jeśli Wynik = Dialogowy kod zwrotny.Tak Następnie
//algorytm wypełniania
KoniecJeśli ;
Koniec procedury

Po wykonaniu procedury ShowQuestion() system nie zatrzymuje się, czeka na reakcję użytkownika, wykonywanie kodu jest kontynuowane.

Użytkownik będzie mógł dokonać wyboru dopiero po zakończeniu całej procedury. W takim przypadku zostanie wywołana procedura eksportu FillItemsQuestionComplete(). Przekazaliśmy jego nazwę konstruktorowi obiektu OpisAlerts.

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

W rozpatrywanym przykładzie wywoływana procedura znajduje się w module zarządzanego formularza, dlatego przekazaliśmy parametr ThisObject.

Rozważmy wywołanie procedury znajdującej się w module ogólnym. W tym celu należy dodać nowy wspólny moduł Przetwarzanie powiadomień, ustawić dla niego flagę „Klient (aplikacja zarządzana)”, a nie ustawiać flagi „Globalny”. Umieśćmy procedurę Wypełnij pytanie o produkty () w tym module.

Następnie procedura obsługi polecenia fill będzie wyglądać następująco:

&Na kliencie
Procedura Wypełnij Produkty(Zespół )
Alarm = Nowość OpisAlerty(„Wypełnij pytanie dotyczące produktów”,
Przetwarzanie alertów);
Tekst pytania = „Część tabelaryczna zostanie wyczyszczona. Kontynuować?" ;
ShowQuestion (Alert, Tekst pytania, Tryb dialogu Pytanie. Tak Nie);
Koniec procedury

Po wywołaniu dowolnej metody otwierającej okno blokujące należy zakończyć procedurę, a kod uruchamiający się dalej należy umieścić w procedurze, która zostanie wywołana po zamknięciu okna.

Aby przenieść kontekst (dane pomocnicze, określone parametry, wartości zmiennych) z procedury otwierającej okno modalne do procedury wywoływanej po jego zamknięciu, udostępniany jest trzeci opcjonalny parametr konstruktora obiektu: OpisAlerts – Parametry dodatkowe.

Obiekt ten (dowolnego typu) zostanie przekazany do procedury opisanej w Opisie alertu jako ostatni parametr.

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

&Na kliencie
Procedura Wypełnij Produkty(Zespół )
Parametr1 = 0 ;
Parametr2 = 0 ;
Lista parametrów= Nowa struktura („Parametr 1, Parametr 2″, Parametr 1, Parametr 2);
Alarm = Nowość OpisAlerty(„Wypełnij pytanie dotyczące produktów”, Ten Obiekt ,
Lista parametrów);
ShowQuestion (Alarm: „Część tabeli zostanie wyczyszczona. Kontynuować?”,
Tryb dialogu Pytanie. Tak Nie);
Koniec procedury
&Na kliencie
Procedura WypełnijProduktyPytanieZakończenie(Wynik , Dodatkowe opcje) Eksport
Jeśli Wynik = Dialogowy kod zwrotny.Tak Następnie
//przeanalizuj dodatkowe parametry.Parametr1
//przeanalizuj dodatkowe parametry.Parametr2
KoniecJeśli ;
Koniec procedury

Jeżeli trzeba przekazać tylko jedną wartość, to nie można skorzystać ze struktury, lecz przypisać tę wartość do parametru Dodatkowe parametry konstruktora obiektu OpisAlerts.

Przyjrzyjmy się kilku przykładom pracy z blokowaniem okien.

Zadanie 1: Otwórz kolejny formularz

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 użytkownik musi ustawić. Po zamknięciu formularza wyświetl wartości parametrów w linii komunikatu.

Tworzymy ogólny formularz „ParametersForm”, na którym umieszczamy szczegóły Parametr1 i Parametr2 oraz polecenie CloseForm:

Procedura obsługi poleceń wygląda następująco:

Procedura obsługi poleceń wygląda następująco: &OnClient
Procedura CloseForm (polecenie)
Lista parametrów= Nowa struktura ( „Parametr 1, Parametr 2”, Parametr1 , Parametr2 );
Zamknąć ( Lista parametrów); Koniec procedury

Dla formularza ustaw właściwość WindowOpenMode na „Blokuj cały interfejs”:

Na formularzu dokumentu umieszczamy polecenie OpenParameters, którego obsługa jest opisana następująco:

&Na kliencie
Procedura Otwórz Opcje(Zespół )
Alarm = Nowość OpisAlerty(„Otwórz opcje Zakończ”, TenObiekt);
Otwórz formularz ( „Formularz ogólny.Parametry formularza”, , , , , , Powiadomienie);
Koniec procedury
&Na kliencie
Procedura OtwórzOpcjeKompletne(Wynik , Dodatkowe opcje) Eksport
Jeśli TypeValue (Result) = Type („Struktura”), to
Dla każdej wartości klucza z pętli wynikowej
Wiadomość = Nowa Wiadomość do użytkownika;
Message.Text = „Klucz: „” ” +KeyValue.Key + „””, wartość = ”
+ Wartość kluczowa.Wartość;
Wiadomość.Raport();
Koniec cyklu ;
KoniecJeśli ;
Koniec procedury

W trybie użytkownika, uruchamiając konfigurację w kliencie WWW, otrzymujemy następujące wyniki:

Aby powiększyć kliknij na obrazek.

Tryb otwierania okna można określić także w ostatnim parametrze procedury OpenForm.

&Na kliencie
Procedura Otwórz Opcje(Zespół )
Alarm = Nowość OpisAlerty(„Otwórz opcje Zakończ”, TenObiekt);
Otwórz formularz ( „Formularz ogólny.Parametry formularza”, , , , , , Alarm
FormWindowOpenMode.LockEntireInterface
);
Koniec procedury

Zadanie 2. Pytanie przy zamykaniu formularza

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

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

&Na kliencie
Perem Należy zamknąć formularz;
&Na kliencie
Procedura przed zamknięciem (awaria, Standardowe przetwarzanie)
Jeśli nie Należy zamknąć formularz= Prawda zatem
Niepowodzenie = Prawda;
Alarm = Nowość OpisAlerty(„Przed zamknięciemZakończenie”, TenObiekt);
ShowQuestion (Alarm: „Czy na pewno chcesz zamknąć okno?”,
Tryb dialogu Pytanie. Tak Nie
);
KoniecJeśli ;
Koniec procedury
&Na kliencie
Procedura Przed zamknięciem(Wynik , Dodatkowe opcje) Eksport
Jeśli Wynik = Dialogowy kod zwrotny.Tak Następnie
Należy zamknąć formularz= Prawda;
Zamknąć();
W przeciwnym razie
Należy zamknąć formularz= Niezdefiniowany;
KoniecJeśli ;
Koniec procedury

W procedurze formularza BeforeClosing użytkownikowi zadawane jest pytanie, flaga Odmowa zostaje ustawiona na True, a zamknięcie formularza zostaje anulowane.

Po pozytywnej odpowiedzi na pytanie zmienna Need toCloseForm zostaje ustawiona na True i formularz zostaje ponownie zamknięty.

Zadanie 3: Wprowadzanie wartości numerycznej

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

W tym celu zamiast metody EnterNumber() należy użyć metody ShowNumberInput(), która zamiast modalnego otwiera okno blokujące.

&Na kliencie
Procedura Wprowadzanie liczb (polecenie)
Alarm = Nowość OpisAlerty(„Wprowadź numer kompletny”, TenObiekt);
PokażEnterNumbers(Alert, 0, „Wprowadź ilość”, 15, 3);
Koniec procedury
&Na kliencie
Procedura Wprowadzanie liczbKompletowanie(Wynik , Dodatkowe opcje) Eksport

Wiadomość = Nowa Wiadomość do użytkownika;
Message.Text = „Wpisałeś ilość” + Wynik;
Wiadomość.Raport();
KoniecJeśli ;
Koniec procedury

Po zamknięciu okna wprowadzania numeru zostanie wywołana procedura, której pierwszym parametrem będzie wpisana liczba lub wartość Niezdefiniowana w przypadku odmowy wpisu.

Zadanie 4. Wybór koloru

Po kliknięciu przycisku na formularzu przetwarzania, korzystając ze standardowego okna dialogowego wyboru koloru, użytkownik określa żądany kolor. Ustaw ten kolor tła klikniętego przycisku.

Dodaj polecenie SelectColor do formularza za pomocą następującej procedury obsługi:

&Na kliencie
Procedura Wybór koloru (polecenie)
Okno dialogowe wyboru koloru= Nowy Okno dialogowe wyboru koloru;
Alarm = Nowość OpisAlerty(„Wybór koloru zakończony”, TenObiekt);
Okno dialogowe wyboru koloru. Pokaż(Alarm);
Koniec procedury
&Na kliencie
Procedura WybórKolorówZakończenie(Wynik , Dodatkowe opcje) Eksport
Jeśli NIE Wynik = Nieokreślony To
Elementy.Wybór koloru.Kolor tła= Wynik;
KoniecJeśli ;
Koniec procedury

W przypadku obiektów Dialog wyboru koloru (a także okna dialogowego edycji okresu standardowego, konstruktora linii formatu, okna dialogowego harmonogramu zadań zwykłych, okna dialogowego wyboru czcionki) metoda Show() otwiera okno blokujące.

Po zamknięciu okna zostanie wywołana procedura, której pierwszym parametrem zostanie przekazana wybrana wartość (kolor, czcionka itp.) lub wartość Niezdefiniowana w przypadku odmowy wyboru przez użytkownika.

Należy zauważyć, że obiekt FileSelectionDialog nie posiada metody Show() w przeciwieństwie do okien dialogowych wyboru koloru lub czcionki, ponieważ implementacja tych okien dialogowych różni się znacząco.

Aby skorzystać z okna dialogowego wyboru pliku w kliencie WWW, należy najpierw włączyć rozszerzenie pliku.

Okna dialogowe zaimplementowane poprzez rozszerzenie pliku nie stwarzają takich samych problemów operacyjnych jak modalne okna przeglądarki, dlatego nie zaimplementowano otwierania okien blokujących dla obiektu FileSelectionDialog.

Podsumowując, zauważamy, że począwszy od wersji 8.3.10 w kliencie WWW zaprzestano obsługi okien modalnych. W takim przypadku, jeśli w konfiguracji zostanie wywołana metoda modalna, generowany jest wyjątek. Ponadto w kliencie internetowym zaprzestano obsługi trybu interfejsu W osobnych oknach. Ponadto zarówno w kliencie cienkim, jak i internetowym nie ma już możliwości otwarcia formularza w osobnym oknie (podczas pracy w trybie interfejsu Zakładki). Tak drastyczne kroki umożliwiły rezygnację z trybu interfejsu, który nie jest już obsługiwany przez wszystkie nowoczesne przeglądarki.

Jakie praktyczne wnioski można wyciągnąć z tej informacji? A wniosek jest dość prosty - jeśli z jakiegoś powodu w Twojej konfiguracji nadal znajdują się wywołania modalne, to w tych miejscach klienta WWW wyświetli się okno z komunikatem o błędzie. Przestrzegam przed próbami „wygooglowania” jakiegoś szybkiego rozwiązania tego problemu, ponieważ... Większość porad sprowadza się do tego przepisu: w konfiguratorze na poziomie konfiguracji ustaw właściwość „Tryb użytkowania modalności” na „Użyj”. Oczywiście w tej chwili nie zadziała to tylko dlatego, że same nowoczesne przeglądarki nie obsługują już wywołań modalnych.

I masz tylko dwa sposoby rozwiązania problemu opisanego powyżej:

  1. Zaktualizuj platformę do wersji 8.3.10+ (8.3.11), ustaw właściwość konfiguracyjną „Tryb zgodności” na „Nie używaj” i przepisz fragmenty kodu korzystające z metod modalnych do asynchronicznego modelu logiki biznesowej
  2. Polecaj swoim klientom korzystanie ze starszych przeglądarek, które nadal obsługują wywołania modalne (Mozilla Firefox w wersji 37 i starszej, Chrome w wersji poniżej 37 itp.).

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

Zajmowaliśmy się przeglądarkami internetowymi w świetle modalności, teraz czas na wyjaśnienie sytuacji z innymi klientami.

Począwszy od wersji 8.3.5, właściwość Tryb użycia modalności na klientach cienkich i grubych jest przestrzegana tylko wtedy, gdy określono opcję wiersza poleceń /EnableCheckModal. Parametr ten jest automatycznie wstawiany do linii poleceń dopiero po uruchomieniu aplikacji z konfiguratora. Jeśli ten parametr nie zostanie określony, nie zostaną wygenerowane żadne wyjątki i nie zostaną wyświetlone odpowiednie ostrzeżenia. Te. w praktyce przy korzystaniu z grubego i cienkiego klienta nie obserwuje się zasadniczych zmian w działaniu przy korzystaniu z trybu modalnego - wywołania modalne będą działać tak samo jak wcześniej, bez generowania żadnych ostrzeżeń, jak w kliencie WWW.

Aby kropkować wszystkie „i”, zauważamy, że począwszy od wersji 8.3.9 właściwość konfiguracyjna „Tryb używania synchronicznych wywołań rozszerzeń platformy i komponentów zewnętrznych” jest ignorowana w grubym kliencie, podczas gdy odpowiednie metody synchroniczne działają bez generowania wyjątków i wyświetlanie ostrzeżeń. Określona ignorowana właściwość została dodana w wersji 8.3.5 w celu obsługi asynchronicznej pracy z komponentami zewnętrznymi, kryptografii i rozszerzeń do pracy z plikami w przeglądarce internetowej Google Chrome. Oczywiste jest, że nie ma to nic wspólnego z grubym klientem, dlatego „ciche” ignorowanie tej właściwości po prostu eliminuje niepotrzebne kontrole stosowania metod synchronicznych podczas korzystania z konfiguracji.

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

Koledzy, są dwie rzeczy, które można czytać w nieskończoność: kanał VKontakte i lista zmian w kolejnej odsłonie platformy, więc podsumujmy końcowe wyniki;)

Rozważając przykłady, które pozwalają przejść od elementów modelu synchronicznego do asynchronicznego, prawdopodobnie zauważyłeś już, że w ogólnym przypadku kodu programu jest więcej. Im więcej kodu, tym bardziej wzrasta złożoność jego dalszej konserwacji i debugowania.

Ponadto ilość kodu wzrośnie jeszcze bardziej, jeśli podczas procesu programowania wykorzystamy więcej okien dialogowych. Dlatego w procesie tworzenia rozwiązań aplikacyjnych skupionych na pracy w kliencie webowym należy pamiętać o paradygmacie pracy, jaki obowiązuje obecnie we współczesnych aplikacjach webowych. Dlatego jeśli Twoja konfiguracja zawiera wiele interaktywnych okien dialogowych z użytkownikiem i ostrzeżeń, warto ponownie rozważyć tę funkcjonalność na korzyść innych podejść do organizowania interakcji z użytkownikiem.

Zamiast wniosków

Nasz cykl „Pierwsze kroki w rozwoju 1C” dobiegł końca. Jeśli przeczytałeś ją w całości, to najprawdopodobniej już zauważyłeś, jak platforma ostatnio dynamicznie się rozwija. Materiał z tej serii powstał stosunkowo niedawno, jednak zmuszeni byliśmy go poważnie zaktualizować, gdyż... Nawet w tak krótkim czasie pojawiło się wiele nowych, ważnych funkcjonalności i zmian. Tak poważne zmiany mogą być nieco kłopotliwe dla programisty 1C, jeśli przez cały ten czas nie rozwijał się i nie rozwijał zawodowo na platformie.

W specjalistycznych zasobach Internetu często można przeczytać prośby początkujących programistów i ich bardziej dojrzałych kolegów o polecenie materiałów, które pomogłyby im zrozumieć rozbudowane i czasem pozornie nieskończone możliwości platformy 1C. Tradycyjnie polecamy Państwu zwrócenie uwagi na nasze kursy programowania

05.12.2014

Zaimplementowano w wersji 8.3.5.1383, 8.3.6.1977.

Współczesne tendencje

Trendy w rozwoju przeglądarek prowadzą do coraz większego odsetka „asynchronii” na platformie. Pierwszym krokiem było porzucenie modalności. Istnieją teraz asynchroniczne wywołania do pracy z rozszerzeniami kryptograficznymi, pracy z plikami i komponentami zewnętrznymi.

Powodem kolejnego ruchu w kierunku asynchronii było to, że twórcy przeglądarki Google Chrome porzucili wsparcie dla dotychczasowej technologii NPAPI (Netscape Plugin Application Programming Interface). Technologia ta została wykorzystana do podłączenia zewnętrznych modułów - rozszerzeń - do przeglądarki.

Takie rozszerzenia są dokładnie tym, czego 1C:Enterprise używa do pracy z kryptografią, do pracy z plikami i do łączenia komponentów zewnętrznych. To dość istotna funkcjonalność. Kryptografia znajduje zastosowanie w elektronicznym zarządzaniu dokumentami, a dzięki zewnętrznym komponentom aplikacje mogą współpracować ze skanerami kodów kreskowych i innym sprzętem handlu detalicznego.

A teraz, zamiast poprzedniej synchronicznej technologii NPAPI, programiści Google Chrome stworzyli nową technologię Native Messaging. Jednocześnie zdecydowanie zalecają, aby wszyscy twórcy rozszerzeń nie korzystali ze starej technologii, ponieważ nie będzie ona obsługiwana.

Nie wchodząc w szczegóły, nowa technologia jest lepsza i bezpieczniejsza. To jest dobre. Ale jedną z jego znaczących różnic jest to, że zapewnia wyłącznie asynchroniczną interakcję z rozszerzeniami przeglądarki. Wymaga to radykalnej zmiany wszystkich istniejących metod pracy z rozszerzeniami i komponentami zewnętrznymi w 1C:Enterprise. Ponieważ wszystkie opierają się na synchronicznej interakcji.

Metody asynchroniczne

Rozwiązaliśmy ten problem w taki sam sposób, jak problem z wywołaniami modalnymi. Dla wszystkich metod synchronicznych wykorzystujących technologię NPAPI stworzyliśmy ich asynchroniczne odpowiedniki. Różnią się one przede wszystkim obecnością prefiksu Start oraz tym, że pierwszym parametrem jest Opis Alarmu, od którego będzie kontynuowane wykonywanie kodu programu po zakończeniu wywołanej akcji.

Na przykład zamiast metody Encrypt() zalecamy teraz użycie metody StartEncrypt():

Menedżer kryptografii.Encrypt(<ИсходныеДанные>, <Получатели>) Menedżer kryptografii. Rozpocznij szyfrowanie (<ОписаниеОповещения>, <ИсходныеДанные>, <Получатели>)

Zamiast metody GetFiles() - StartGettingFiles():

Pobierzpliki(<ПолучаемыеФайлы>, <ПолученныеФайлы>, <РасположениеФайлов>, <Интерактивно>) Rozpocznij odbieranie plików ((<ОписаниеОповещения>, <ПолучаемыеФайлы>, <РасположениеФайлов>, <Интерактивно>)

Zamiast InstallExternalComponent() - StartInstallingExternalComponent():

Ustaw komponent zewnętrzny (<Местоположение>) Rozpocznij instalację komponentów zewnętrznych (<ОписаниеОповещенияОЗавершении>, <Местоположение>)

Właściwie wszystko jest bardzo podobne do tego, co zrobiliśmy wcześniej, kiedy pozbyliśmy się modalności. Jednak działanie nowych metod asynchronicznych ma zasadniczą cechę, której nie mają metody wywołujące niemodalne okna dialogowe.

Wywołując asynchronicznie niemodalne okno dialogowe, oczekujemy tylko pewnej reakcji użytkownika i niczego więcej. W tym sensie, że nic niespodziewanego nie może się wydarzyć.

W procesie wywoływania asynchronicznych metod pracy z rozszerzeniami i komponentami mogą wystąpić wyjątkowe sytuacje. Rozszerzenie nie zostało zainstalowane, komponent nie został załadowany itp.

Zwykle zapewniasz obsługę takich wyjątków w kodzie aplikacji. Korzystanie z operatora wyjątku Try.... Ale teraz staje się to niemożliwe, ponieważ w momencie wywołania asynchronicznego kod aplikacji nie jest wykonywany. W związku z tym operator Próba... Wyjątek nie działa.

  • BłądProceduryNazwa;
  • Moduł obsługi błędów.

Jeśli podczas wywołania asynchronicznego coś pójdzie nie tak i wystąpi wyjątek, zostanie wykonana procedura wskazana przez te właściwości. Używanie tych dwóch właściwości ma sens tylko w asynchronicznych metodach pracy z rozszerzeniami. Podczas wywoływania niemodalnych okien dialogowych te właściwości nie są potrzebne.

Właściwość konfiguracji

Podobnie jak w przypadku odrzucenia modalności, całe rozwiązanie aplikacyjne jako całość musi wiedzieć „co to jest”. Albo jest modalne, albo niemodalne. Albo jest synchroniczny, albo asynchroniczny.

Wcześniej, aby rozwiązać problem z modalnością, dodaliśmy do konfiguracji specjalną właściwość: Tryb korzystania z modalności. Teraz, aby rozwiązać problem z synchronizacją, dodaliśmy właściwość o podobnym znaczeniu: Tryb korzystania z synchronicznych wywołań rozszerzeń i komponentów zewnętrznych.

Istota jego użycia jest następująca:

  • Nie używaj to nowy, asynchroniczny tryb działania. W przypadku nowych konfiguracji jest to tryb standardowy. Używanie starych, synchronicznych metod jest zabronione. Nie przechodzą kontroli syntaktycznej, nie znajdują się w wskazówce kontekstowej. Próba wykonania metody synchronicznej zgłasza wyjątek.
  • Używaj z ostrzeżeniem - ten tryb jest przeznaczony dla programisty. Nie uniemożliwia to stosowania starszych, synchronicznych metod. Jednak za każdym razem, gdy na kliencie wywoływana jest metoda synchroniczna, pojawia się komunikat ostrzegawczy. Zalecamy używanie tego trybu w konfiguracjach „recyklingowych”. Jest to wygodne do wizualnego wyszukiwania wywołań synchronicznych i monitorowania ich podczas procesu rewizji.
  • Użyj - tryb zapewniający kompatybilność nowej wersji platformy ze starymi konfiguracjami, które wykorzystują synchroniczne metody pracy z rozszerzeniami i komponentami zewnętrznymi.

Wszystkie metody i właściwości, o których do tej pory mówiliśmy, zostały zaimplementowane w wersji 8.3.5.1383. Możesz je wykorzystać w swoich rozwiązaniach aplikacyjnych. A programiści BSP na przykład przeniosą podsystemy korzystające z narzędzi kryptograficznych, pracujące z plikami i komponentami zewnętrznymi do pracy asynchronicznej.

Oczywiście, podobnie jak w przypadku połączeń modalnych, prawdopodobnie masz pytanie. Czy muszę przerobić moje rozwiązanie aplikacyjne? I ogólnie, czy muszę używać tych metod asynchronicznych w moim nowym rozwiązaniu aplikacyjnym?

Kiedy jest to potrzebne?

Odpowiedź na to pytanie jest zasadniczo taka sama, jak daliśmy wcześniej. Kiedy mówili o porzuceniu modalności.

Po pierwsze, nie każda wersja platformy technologicznej obsługuje tryb asynchronicznych wywołań do rozszerzeń i komponentów zewnętrznych. Ten tryb pracy istnieje począwszy od wersji 8.3.5.1383. Dlatego jeśli pracujesz na niższych wersjach platformy, nie musisz się na razie martwić rezygnacją z metod synchronicznych.

Po drugie, nie wszystkie rozwiązania aplikacyjne muszą koniecznie korzystać z tego trybu. Aplikacje krytyczne to te, z którymi będziesz pracować za pomocą klienta internetowego w przeglądarce Google Chrome. Aplikacje tego typu to w dużej mierze aplikacje działające w modelu usługowym. Jeśli Twoje rozwiązanie aplikacyjne na pewno nie będzie wykorzystywane w tym trybie, nie możesz na razie rezygnować z metod synchronicznych.

Jednak pomimo pierwszego i drugiego punktu istnieją globalne trendy, które mogą mieć wpływ na Twoje plany. My, firma 1C, opracowujemy wszystkie standardowe rozwiązania w oparciu o fakt, że można je wykorzystać na dowolny z dostępnych sposobów. Dlatego będziemy wdrażać nowe rozwiązania aplikacyjne, a także wszystkie użyte w nich biblioteki, w trybie bez wykorzystania wywołań synchronicznych.

Oznacza to, że lepiej już teraz zacząć opanowywać ten tryb działania. Nawet jeśli Twoja aplikacja może jeszcze z niego nie korzystać, zalecamy rozpoczęcie tłumaczenia już teraz, jeśli to możliwe. Zachęcamy jednak do kreatywnego podejścia do tego procesu. W tym samym duchu, co przy rezygnacji z modalności. Oznacza to, że nie ma potrzeby mechanicznego zastępowania metod synchronicznych metodami asynchronicznymi. Na początek warto zastanowić się, czy nie da się zmienić algorytmu lub skryptu, aby w tym miejscu całkowicie zrezygnować ze stosowania metod synchronicznych?

Refaktoryzacja

Z jednej strony, jeśli konfiguracja jest duża i jest w niej dużo wywołań synchronicznych, to „ręczne” przerobienie takiej konfiguracji może być zadaniem bardzo czasochłonnym.

Z kolei począwszy od wersji 8.3.5.1068 platforma posiada narzędzia pozwalające na konwersję wywołań synchronicznych na ich asynchroniczne odpowiedniki.

Dlatego wzięliśmy te już istniejące narzędzia, rozszerzyliśmy je i zmieniliśmy ich orientację z „odchodzenia od modalności” na „przejście do asynchronii”. W swojej istocie przejście do metod asynchronicznych przypomina działania, które są wykonywane w przypadku porzucenia modalności. Stare, „niemodne”, synchroniczne (modalne) wywołania należy zastąpić nowymi, „modnymi” wywołaniami asynchronicznymi, które korzystają z Notification Processing.

W tej zaktualizowanej formie narzędzia refaktoryzacyjne stały się dostępne w wersji 8.3.6.1977.

Ponieważ nacisk na te narzędzia przesunął się w stronę asynchronii, zmieniliśmy nazwy niektórych poleceń. Zamiast „niemodalnego” używa się teraz wyrażenia „przestarzały synchroniczny”:

Dodatkowo do ustawień konfiguratora dodaliśmy nową zakładkę Refaktoryzacja. Domyślnie obie transformacje są włączone. Ale jeśli tego potrzebujesz, za jego pomocą możesz wykonać tylko jeden z rodzajów transformacji podczas automatycznej refaktoryzacji:

Jeśli jesteś aktywnym użytkownikiem oprogramowania 1C, jest to świetne rozwiązanie. Program jest naprawdę dobry, pozwala wykonać wiele zadań szybko i z najwyższą możliwą jakością. Wszystko byłoby w porządku, gdyby nie szokowała nas od czasu do czasu przerażającymi wiadomościami o błędach, które się pojawiły. Dobrze, jeśli spotkałeś się wcześniej z takimi błędami osobiście lub przez osoby pracujące obok ciebie i potrafisz jasno wyjaśnić palcami, jak rozwiązać problem, a także wyjaśnić, dlaczego powstał.

Problem został rozwiązany po zmianie ustawień lub kodu 1C.

Taka treść informacyjna pozwoli przywrócić funkcjonalność programu 1C, a także w przyszłości uniknąć poważnych błędów powodujących problemy.

Algorytm korygowania błędów w 1C

W 1C pojawia się również następujący błąd: „Używanie metod synchronicznych na kliencie jest zabronione”. Jeśli tak się stanie, nie powinieneś wpadać w panikę, wystarczy nawigować po sekwencji swoich działań, zapoznając się z cennymi rekomendacjami doświadczonych użytkowników.

Dokonywanie zmian w ustawieniach programu

Jeśli próbowałeś wywołać metodę kontekstową w programie 1C, ale zamiast oczekiwanych kolejnych działań, do których jesteś już przyzwyczajony, nagle pojawił się komunikat informujący, że używanie metod synchronicznych na kliencie jest zabronione, nie powinieneś panikować, spróbujmy rozwiązać tę awarię oprogramowania.

Najpierw kliknij wiersz „Konfigurator”. Następnie w otwartym menu kontekstowym przejdź do ostatniego wiersza „Właściwości” i kliknij go. Teraz otworzy się okno, w którym możesz samodzielnie dokonać zmian w ustawieniach, w tym dostosować tryb pracy programu.

Wśród proponowanych trybów znajdź wiersz „Tryb używania synchronicznych wywołań do numerów wewnętrznych i komponentów zewnętrznych”. Proszę zwrócić uwagę na wartość ustawioną dla tego trybu. Ważne jest, aby była zaznaczona opcja „Użyj”. Jeśli widzisz coś innego, kliknij pole wyboru i wybierz tę opcję.

Teraz zamknij wszystkie otwarte okna i spróbuj ponownie wykonać wszystkie żądane czynności. Prawdopodobieństwo, że Ci się uda, jest duże.

Zmiana kodu

Niestety, nie zawsze udaje się naprawić błąd „Używanie metod synchronicznych na kliencie jest zabronione” po dokonaniu zmian w ustawieniach programu. Czasem trzeba zająć się bardziej odpowiedzialnymi zajęciami. W szczególności należy dokonać zmian w kodzie programu. Doświadczeni użytkownicy zalecają korzystanie z metody logowania asynchronicznego, jeśli logowanie synchroniczne nagle stanie się zabronione.

Otwórz kod programu. Nazwę procedury (Procedura OpenLiFile1()) i jej koniec (EndProcedure) pozostaw bez zmian, ale radykalnie zmień treść procedury.

Wystarczy napisać trzy linijki:

Alert = Nowy opis alertu("RecordOrMore",ThisObject);
PytanieText = „Zapisać?”;
ShowQuestion(Alert, Tekst pytania, DialogModeQuestion.YesNo);

Jeśli nic z tego nie rozumiesz, nie ma problemu, po prostu skopiuj i wklej pomiędzy nazwą procedury a jej końcową linią. Wierzymy, że gdy wykonasz takie czynności, wszystko się ułoży, a program znów zacznie działać, pozwalając Ci na wykonanie wszystkich czynności na profesjonalnym, wysokim poziomie.

„Korzystanie z okien modalnych w tym trybie jest zabronione” - ten błąd zaczyna teraz niepokoić użytkowników i programistów 1C wraz z pojawieniem się nowego interfejsu platformy 1C 8.3 - „ „.

Twórcy platformy technologicznej 1C idą z duchem czasu, standaryzując swoje rozwiązanie do międzynarodowych standardów tworzenia oprogramowania. Wszystkie standardy w taki czy inny sposób sprowadzają się do jednego interfejsu, blisko stron internetowych.

Okna modalne i wyskakujące są uważane za złe i już dawno przestały być normalne w tworzeniu oprogramowania. Użytkownicy są przyzwyczajeni do pracy „w jednym oknie”.

Szczególnie często widzimy błąd modalny w następujących metodach 1C:

  • Pytanie;
  • Ostrzeżenie;
  • Otwarta wartość.

Wraz z wydaniem nowego interfejsu „taksówki” twórcy platformy 1C 8 podjęli właściwą decyzję - spróbować przeszkolić twórców rozwiązań aplikacyjnych w nowy sposób. Uwzględnili funkcję w nowej platformie – „tryb modalny”.

Szybka naprawa

Jeśli nie masz czasu się nad tym zastanowić i potrzebujesz szybko rozwiązać problem, oferujemy proste, ale nie do końca poprawne rozwiązanie. Aby szybko naprawić błąd, wystarczy zmienić tryb modalności we właściwościach konfiguracyjnych.

W tym celu należy zalogować się do systemu w trybie, otworzyć konfigurację:

W otwartej konfiguracji wywołaj menu kontekstowe, klikając prawym przyciskiem myszy katalog główny konfiguracji i wybierając „Właściwości”:

Uzyskaj 267 lekcji wideo na 1C za darmo:

Otworzą się właściwości konfiguracyjne, gdzie w stopce znajduje się interesująca nas właściwość - „Tryb użycia modalności”, wybierz tryb „Użyj”:

Następnie zapisz i zastosuj zmiany, naciskając klawisz „F7”.

Prawidłowe rozwiązanie problemu

Prawidłowym sposobem rozwiązania tego problemu jest modyfikacja konfiguracji lub przetwarzania zewnętrznego w celu spełnienia nowych wymagań.

Ostrzeżenia, pytania, okna dialogowe i inne moduły muszą zostać przepisane w nowy sposób.

Wbudowane operatory wywołujące okna modalne należy zastąpić zduplikowanymi funkcjami.

Na przykład:

  • Ostrzeżenie - PokażOstrzeżenie;
  • Pytanie - ShowQuestion (szczegóły - );
  • — Pokaż numery wejściowe.

W tym samym czasie pojawił się wyspecjalizowany obiekt - Opis Powiadomienia.

Przykład wymiany:

Ciąg = "" ; EnterString(Ciąg, „Wprowadź wartość ciągu”) Notify("Wpisałeś " + String) ;

Należy zastąpić:

Ciąg = "" ; Alerty opisu = Nowe alerty opisu ( „Wejście linii testowej”, Ten formularz) ; ShowLineInput(Alerty opisu, ciąg znaków, „Wprowadź wartość ciągu”) ;

Jednocześnie dodaj na kliencie podobną procedurę, która będzie działać po wpisaniu wartości przez użytkownika:

&Na procedurze klienta TestInputString(ReceivedValue, PassedParameters) Export Notify("Wpisałeś " + String) ; Koniec procedury

W ten sam sposób otwiera się formularze opracowane w ramach konfiguracji. Wystarczy zastąpić metodę „OpenFormModal” metodą „OpenForm”, podając opis alertu i wymaganą dla niego nową procedurę.

Aby zablokować dostęp do wywoływanego formularza poprzez otwarcie formularza, wystarczy podać wartość „Zablokuj okno właściciela” we właściwości „Tryb otwierania okna” formularza:

Spodobał Ci się artykuł? Podziel się z przyjaciółmi!
Czy ten artykuł był pomocny?
Tak
NIE
Dziekuję za odpowiedź!
Coś poszło nie tak i Twój głos nie został policzony.
Dziękuję. Twoja wiadomość została wysłana
Znalazłeś błąd w tekście?
Wybierz, kliknij Ctrl + Enter a my wszystko naprawimy!