Asinkrone metode 1s. Zašto se pojavljuje pogreška "Korištenje sinkronih metoda na klijentu je zabranjeno"? Brzi popravak

25.10.2019 Sigurnost

U članku će se raspravljati o glavnim razlozima napuštanja modaliteta u platformi 1C:Enterprise i glavnim metodama za pretvaranje dijelova koda u novi asinkroni model.

Primjenjivost

U članku se govori o asinkronom modelu za izgradnju poslovne logike, dodanoj platformi “1C:Enterprise” izdanje 8.3. Prikazane informacije relevantne su za trenutna izdanja platforme.

Odbijanje korištenja modalnih prozora u platformi 1C:Enterprise 8.3

Prilikom razvoja konfiguracije na platformi 1C:Enterprise 8 povremeno se javlja potreba za pauziranjem programa dok korisnik ne donese odluku ili ne izvrši neku radnju.

Na primjer, kada se klikne na gumb za popunjavanje tabelarnog dijela, korisnik bi trebao biti upitan treba li poništiti tablični dio kako se prethodno uneseni podaci ne bi izgubili.

Ovo se ponašanje može postići, na primjer, pomoću sljedećeg koda:

&NaKlijentu
Postupak Ispunite proizvode(Tim )
Odgovor = Pitanje (“Dio tablice bit će izbrisan. Nastaviti?”, Način dijalogaPitanje.DaNe);
Ako je odgovor = Povratni kod dijaloga. Da Zatim
//algoritam punjenja
Završi ako ;
Kraj postupka

Kao rezultat ovog fragmenta koda, izvršenje programskog koda bit će obustavljeno, pitanje će se prikazati na ekranu, sučelje aplikacije osim dijaloga s pitanjem postat će nedostupno, sustav čeka da korisnik napravi odluku, a izvršavanje koda nastavit će se tek nakon odgovora na pitanje.

Otvaranje modalnih prozora pozivom metode OpenModal() također uzrokuje pauze u izvršavanju koda i blokiranje sučelja.

Kada radite s konfiguracijom u načinu web klijenta putem preglednika, u ovom slučaju otvorit će se novi prozor - skočni prozor koji će blokirati ne samo trenutnu karticu, već i cijelo sučelje preglednika, uključujući ostatak otvoreni prozori i kartice.

Skočni prozori na internetu često se koriste za zlonamjernu distribuciju neželjenih reklama, zbog čega preglednici sadrže značajke blokiranja skočnih prozora.

U ovom slučaju, da biste radili s konfiguracijama 1C:Enterprise 8 putem preglednika, morate onemogućiti blokiranje skočnih prozora.

Problemi nastaju i pri radu na Mobilni uredaji. Na primjer, modalni prozori nisu podržani na iPadu.

Da biste riješili ove probleme, trebali biste koristiti blokirajuće prozore umjesto modalnih. Za korisnika, vizualno sve izgleda isto: prozor blokira sučelje web klijenta.

Međutim, prozor za blokiranje je "nacrtan" na vrhu glavnog prozora, a blokirana je samo trenutna kartica preglednika u kojoj je konfiguracija otvorena, što vam omogućuje prebacivanje na druge kartice, jer se modalni prozori preglednika ne koriste.

Tako se skočni prozori ne otvaraju u pregledniku i osiguran je rad putem web klijenta na mobilnim uređajima.

Korijenski element konfiguracije ima svojstvo "Modality mode", koje određuje mogu li se modalni prozori otvoriti u konfiguraciji.

Ako je odabrana opcija "Koristi", tada se mogu otvoriti modalni prozori. Ako je odabrana opcija "Ne koristi", tada modalni prozori nisu dopušteni. Kada pokušate pozvati metodu koja otvara modalni prozor, sustav prikazuje poruku o pogrešci:

S ovom vrijednošću svojstva "Modality usage mode" dopušteno je samo blokiranje prozora.

Ako je odabrana opcija "Koristi s upozorenjima", kada se otvore modalni prozori, u prozoru s porukom prikazuje se sljedeći tekst:

Ova radna opcija može se koristiti kao posredna prilikom prerade konfiguracije kako bi se napustila uporaba modalnih prozora.

Glavna razlika između prozora za blokiranje i modalnih prozora je u tome što otvaranje prozora za blokiranje ne pauzira izvršavanje koda.

Stoga će programeri morati ponovno napisati programski kod koji koristi modalne prozore kako bi uzeli u obzir ovu značajku.

Kod je potrebno podijeliti u dva dijela:

  • otvaranje prozora za blokiranje;
  • obrada odabira korisnika.

Fragment koda dat na početku članka potrebno je prepisati na sljedeći način:

&NaKlijentu
Postupak Ispunite proizvode(Tim )
Upozorenje = Novo Opis upozorenja(, OvajObjekt );

Način dijalogaPitanje.DaNe);
Kraj postupka
&NaKlijentu
Postupak (rezultat, Dodatne mogućnosti) Izvoz
Ako je rezultat = Povratni kod dijaloga. Da Zatim
//algoritam punjenja
Završi ako ;
Kraj postupka

Nakon izvršenja procedure ShowQuestion(), sustav se ne zaustavlja, čeka se odgovor korisnika, izvršavanje koda se nastavlja.

Korisnik će se moći odlučiti tek nakon što završi cijeli postupak. U ovom slučaju, bit će pozvana procedura izvoza FillItemsQuestionComplete(). Proslijedili smo njegovo ime konstruktoru objekta DescriptionAlerts.

Procedura koja će biti pozvana nakon odabira može se nalaziti u modulu obrasca, naredbenom modulu ili općem neglobalnom modulu.

U razmatranom primjeru, pozvana procedura se nalazi u modulu kontrolirani oblik, pa smo proslijedili parametar ThisObject.

Razmotrimo pozivanje procedure koja se nalazi u zajedničkom modulu. Da biste to učinili, dodajte novi zajednički modul Obrada obavijesti, postavite oznaku "Klijent (upravljana aplikacija)" za njega i nemojte postavljati oznaku "Globalno". Smjestimo proceduru Fill in Products Question Completion () u ovaj modul.

Tada će obrađivač naredbe fill izgledati ovako:

&NaKlijentu
Postupak Ispunite proizvode(Tim )
Upozorenje = Novo Opis upozorenja("Ispunite pitanje o proizvodima",
Obrada upozorenja);
Question Text = “Tabelarni dio će biti izbrisan. Nastaviti?" ;
ShowQuestion (Upozorenje, Tekst pitanja, Način dijalogaPitanje.DaNe);
Kraj postupka

Nakon poziva bilo koje metode koja otvara prozor za blokiranje, procedura mora izaći, a kod koji se sljedeći pokreće treba smjestiti u proceduru koja će biti pozvana nakon što se prozor zatvori.

Za prijenos konteksta (pomoćnih podataka, određenih parametara, vrijednosti varijable) iz procedure koja otvara modalni prozor u proceduru koja se poziva kada se zatvori, predviđen je treći izborni parametar konstruktora objekta: DescriptionAlerts – Dodatni parametri.

Ovaj objekt (bilo koje vrste) bit će proslijeđen proceduri opisanoj u Opisu upozorenja kao posljednji parametar.

Koristeći primjer odjeljka koda koji je gore razmotren, to se može učiniti ovako:

&NaKlijentu
Postupak Ispunite proizvode(Tim )
Parametar1 = 0;
Parametar2 = 0;
Popis parametara= Nova struktura (“Parametar1, Parametar2″, Parametar1, Parametar2);
Upozorenje = Novo Opis upozorenja("Ispunite pitanje o proizvodima", ovaj objekt ,
Popis parametara);
ShowQuestion (Upozorenje, "Dio tablice bit će izbrisan. Nastaviti?",
Način dijalogaPitanje.DaNe);
Kraj postupka
&NaKlijentu
Postupak IspuniteProductsQuestionCompletion(Rezultat, Dodatne mogućnosti) Izvoz
Ako je rezultat = Povratni kod dijaloga. Da Zatim
//analiziraj dodatne parametre.Parametar1
//analiziraj dodatne parametre.Parametar2
Završi ako ;
Kraj postupka

Ako trebate proslijediti samo jednu vrijednost, tada ne možete koristiti strukturu, već dodijeliti ovu vrijednost parametru Dodatni parametri konstruktora objekta DescriptionAlerts.

Pogledajmo nekoliko primjera rada s blokiranjem prozora.

Zadatak 1: Otvorite drugi obrazac

Iz obrasca dokumenta klikom na gumb “Otvori parametre” potrebno je otvoriti obrazac na kojem se nalaze dva checkboxa Parametar1 i Parametar2 koje korisnik mora postaviti. Nakon zatvaranja obrasca, prikazati vrijednosti parametara u retku poruke.

Kreiramo opći obrazac “ParameterForm”, na koji postavljamo detalje Parameter1 i Parameter2, kao i naredbu CloseForm:

Rukovatelj naredbom izgleda ovako:

Rukovatelj naredbom izgleda ovako: &OnClient
Procedura CloseForm (naredba)
Popis parametara= Nova struktura ( “Parametar1, Parametar2”, Parametar1, Parametar2);
Zatvoriti ( Popis parametara); Kraj postupka

Za obrazac postavite svojstvo WindowOpenMode na "Blokiraj cijelo sučelje":

Na formu dokumenta postavljamo naredbu OpenParameters čiji je rukovatelj opisan na sljedeći način:

&NaKlijentu
Postupak OpenOptions(Tim )
Upozorenje = Novo Opis upozorenja("Otvori opcije Završi", OvajObjekt );
OpenForm ( “Opći obrazac.Parametri obrasca”, , , , , , Obavijest);
Kraj postupka
&NaKlijentu
Postupak OpenOptionsComplete(Rezultat, Dodatne mogućnosti) Izvoz
Ako je TypeValue (Rezultat) = Type (“Structure”) Onda
Za svaki KeyValue iz petlje rezultata
Poruka = ​​Novo Poruka korisniku;
Message.Text = “Ključ: “” ” + KeyValue.Key + “””, vrijednost = ”
+ KeyValue.Value;
Poruka.Izvješće();
Kraj ciklusa ;
Završi ako ;
Kraj postupka

U korisničkom načinu rada, izvođenjem konfiguracije pod web klijentom, dobivamo sljedeće rezultate:

Kliknite na sliku za povećanje.

Način otvaranja prozora također se može odrediti u zadnjem parametru procedure OpenForm.

&NaKlijentu
Postupak OpenOptions(Tim )
Upozorenje = Novo Opis upozorenja("Otvori opcije Završi", OvajObjekt );
OpenForm ( “Opći obrazac.Parametri obrasca”, , , , , , Upozorenje
FormWindowOpenMode.LockEntireInterface
);
Kraj postupka

Zadatak 2. Pitanje pri zatvaranju forme

Prilikom zatvaranja prozora obrade pitajte korisnika želi li doista zatvoriti prozor.

Ovaj problem se može riješiti korištenjem sljedećeg koda koji se nalazi u modulu obrasca za obradu:

&NaKlijentu
Perem Potrebno je zatvoriti obrazac;
&NaKlijentu
Postupak prije zatvaranja (neuspjeh, Standardna obrada)
Ako ne Potrebno je zatvoriti obrazac= Istina Onda
Neuspjeh = Istina ;
Upozorenje = Novo Opis upozorenja(“Prije završetka zatvaranja”, OvajObjekt );
ShowQuestion (Upozorenje, "Jeste li sigurni da želite zatvoriti prozor?",
Način dijalogaPitanje.DaNe
);
Završi ako ;
Kraj postupka
&NaKlijentu
Postupak Prije završetka zatvaranja(Rezultat, Dodatne mogućnosti) Izvoz
Ako je rezultat = Povratni kod dijaloga. Da Zatim
Potrebno je zatvoriti obrazac= Istina ;
Zatvoriti();
Inače
Potrebno je zatvoriti obrazac= Nedefinirano;
Završi ako ;
Kraj postupka

U proceduri obrasca Prije zatvaranja, korisniku se postavlja pitanje, zastavica odbijanja postavlja se na True i zatvaranje obrasca se poništava.

Nakon potvrdnog odgovora na pitanje, varijabla Need toCloseForm postavlja se na True i forma se ponovno zatvara.

Zadatak 3: Unos numeričke vrijednosti

Klikom na gumb na obrascu za obradu otvara se standardni dijalog za unos broja.

Da biste to učinili, trebate koristiti metodu ShowNumberInput() umjesto EnterNumber(), koja otvara blokirajući prozor umjesto modalnog.

&NaKlijentu
Postupak Unos brojeva (naredba)
Upozorenje = Novo Opis upozorenja(“EnterNumberComplete”, OvajObjekt );
ShowEnterNumbers(Upozorenje, 0, “Unesite količinu”, 15, 3);
Kraj postupka
&NaKlijentu
Postupak Dovršavanje unosa brojeva(Rezultat, Dodatne mogućnosti) Izvoz

Poruka = ​​Novo Poruka korisniku;
Message.Text = “Unijeli ste količinu” + Rezultat;
Poruka.Izvješće();
Završi ako ;
Kraj postupka

Nakon zatvaranja prozora za unos broja poziva se procedura čiji će prvi parametar biti uneseni broj ili Nedefinirana vrijednost ako je korisnik odbio unos.

Zadatak 4. Odabir boje

Kada kliknete na gumb na obrascu za obradu, koristeći standardni dijalog za odabir boje, korisnik određuje željenu boju. Postavite ovu boju za pozadinu kliknutog gumba.

Dodajte naredbu SelectColor u obrazac sa sljedećim rukovateljem:

&NaKlijentu
Odabir boje postupka (naredba)
Dijaloški okvir za odabir boje= Novo Dijaloški okvir za odabir boje;
Upozorenje = Novo Opis upozorenja(“Odabir boje završen”, OvajObjekt );
Dijaloški okvir za odabir boje. Prikaži (upozorenje);
Kraj postupka
&NaKlijentu
Postupak ChoiceColorsCompletion(Rezultat, Dodatne mogućnosti) Izvoz
Ako NIJE Rezultat = Nedefinirano Onda
Elementi. Odabir boja. Boja pozadine= Rezultat;
Završi ako ;
Kraj postupka

Za objekte dijaloškog okvira za odabir boje (kao i dijaloški okvir za uređivanje standardnog razdoblja, konstruktor retka formata, dijaloški okvir redovnog rasporeda zadataka, dijaloški okvir za odabir fonta), metoda Show() otvara prozor za blokiranje.

Nakon zatvaranja prozora poziva se procedura čijem prvom parametru se prosljeđuje odabrana vrijednost (boja, font itd.) ili vrijednost Nedefinirano ako je korisnik odbio izbor.

Treba napomenuti da objekt FileSelectionDialog nema Show() metodu, za razliku od dijaloga za odabir boje ili fonta, jer je implementacija ovih dijaloga značajno drugačija.

Da biste koristili dijaloški okvir za odabir datoteke na web klijentu, prvo morate omogućiti ekstenziju datoteke.

Dijalozi implementirani putem ekstenzije datoteke ne stvaraju iste operativne probleme kao modalni prozori preglednika, tako da otvaranje prozora za blokiranje za objekt FileSelectionDialog nije implementirano.

Zaključno, napominjemo da je počevši od izdanja 8.3.10 podrška za modalne prozore ukinuta u web klijentu. U ovom slučaju, ako se u konfiguraciji pozove modalna metoda, generira se iznimka. Također, podrška za način sučelja je ukinuta u web klijentu U odvojenim prozorima. Osim toga, ni u tankom ni u web klijentu više nije moguće otvoriti obrazac u zasebnom prozoru (kada se radi u načinu sučelja Bookmarks). Takvi drastični koraci omogućili su napuštanje načina sučelja, koje više ne podržavaju svi moderni preglednici.

Kakav se praktični zaključak može izvući iz ovih informacija? A zaključak je vrlo jednostavan - ako iz nekog razloga još uvijek postoje modalni pozivi u vašoj konfiguraciji, tada će se na tim mjestima u web klijentu prikazati prozor s porukom o pogrešci. Želio bih upozoriti da ne pokušavate "guglati" neke brza odluka ovaj problem, jer Većina savjeta svodi se na ovaj recept: u konfiguratoru na razini konfiguracije postavite svojstvo “Modality usage mode” na “Use”. Naravno, u ovaj trenutak, ovo neće uspjeti samo zato što moderni preglednici više ne podržava modalne pozive.

I imate samo dva načina da riješite gore opisani problem:

  1. Ažurirajte platformu za izdanje 8.3.10+ (8.3.11), postavite svojstvo konfiguracije "Compatibility Mode" na "Do not use" i prepišite fragmente koda koji koriste modalne metode u model asinkrone poslovne logike
  2. Preporučite svojim klijentima korištenje zastarjeli preglednici, gdje su modalni pozivi još uvijek bili podržani ( Mozilla Firefox verzije 37 i niže, verzije Chromea ispod 37 itd.).

Usput, počevši od izdanja 8.3.11, Microsoftovi web preglednici više nisu podržani Internet Explorer verzije 8 i 9.

Bavili smo se web preglednicima u svjetlu modaliteta, sada je vrijeme da razjasnimo situaciju s drugim klijentima.

Počevši od verzije 8.3.5, svojstvo Modality Usage Mode u tankim i debelim klijentima poštuje se samo ako je navedena opcija naredbenog retka /EnableCheckModal. Ovaj se parametar automatski zamjenjuje naredbeni redak samo prilikom pokretanja aplikacije iz konfiguratora. Ako ovaj parametar nije naveden, tada se ne generiraju iznimke i odgovarajuća upozorenja se ne prikazuju. Oni. u praksi, pri korištenju debelog i tankog klijenta, ne uočava se temeljna promjena u radu pri korištenju modalnog načina rada - modalni pozivi radit će isto kao što su radili prije, bez ikakvih upozorenja, kao u web klijentu.

Da stavimo točku na sve, napominjemo da se od izdanja 8.3.9 konfiguracijsko svojstvo "Način korištenja sinkronih poziva proširenja platforme i vanjskih komponenti" zanemaruje u debelom klijentu, dok odgovarajuće sinkrone metode rade bez generiranja iznimke i prikazivanje upozorenja. Navedeno ignorirano svojstvo dodano je u verziji 8.3.5 za podršku asinkronog rada s vanjskim komponentama, kriptografijom i ekstenzijama za rad s datotekama u web pregledniku Google Chrome. Jasno je da to nema veze s debelim klijentom, pa samim time i “tiho” ignoriranje ovog posjeda jednostavno eliminirao nepotrebne provjere za korištenje sinkronih metoda pri korištenju konfiguracije.

Usput! Zbog činjenice da se platforma samouvjereno kreće prema webu, od verzije 8.3.8 programeri su uveli određena ograničenja na programski kod koji je povezan s logikom zatvaranja obrasca ili aplikacije, koja se izvršava u debelom i tanki klijenti. Obavezno pročitajte naš članak koji detaljno pokriva ovu nijansu. Osim toga, u tečaju "Profesionalni razvoj sučelja i obrazaca u 1C: Enterprise 8.3" postoji poglavlje posvećeno napuštanju modaliteta, a možete prikupiti mnogo korisnih i relevantnih informacija o ovoj temi.

Kolege, postoje dvije stvari koje možete beskonačno čitati: VKontakte feed i popis promjena u sljedećem izdanju platforme, pa sumiramo konačne rezultate;)

U procesu razmatranja primjera koji vam omogućuju prijelaz s elemenata sinkronog modela na asinkroni, vjerojatno ste već primijetili da u općem slučaju postoji više programskog koda. Što je više koda, to se više povećava složenost njegovog daljnjeg održavanja i otklanjanja pogrešaka.

Osim toga, količina koda će se još više povećati ako koristimo velika količina dijalozima. Stoga se u procesu razvoja aplikativna rješenja orijentirani na rad u web klijentu, potrebno je zapamtiti paradigmu rada koja se trenutno koristi u modernim web aplikacijama. Stoga, ako vaša konfiguracija ima mnogo interaktivnih dijaloga s korisnikom i upozorenja, onda ima smisla ponovno razmotriti ovu funkcionalnost u korist nekih drugih pristupa organizaciji interakcije korisnika.

Umjesto zaključka

Naš ciklus “Prvi koraci u razvoju 1C” je došao kraju. Ako ga pročitate u cijelosti, onda ste najvjerojatnije već primijetili kako se platforma u posljednje vrijeme razvija velikom brzinom. Materijal u ovoj seriji napisan je relativno nedavno, ali bili smo prisiljeni ozbiljno ga ažurirati, jer... čak iu tako kratkom vremenskom razdoblju, puno novog važnog funkcionalnost i promjene. Takve velike promjene mogu biti pomalo zbunjujuće za 1C programera ako sve ovo vrijeme nije rastao i profesionalno se razvijao s platformom.

Na specijaliziranim internetskim resursima često možete pročitati zahtjeve programera početnika i njihovih zrelijih kolega da preporuče materijale koji bi im pomogli da razumiju opsežne i ponekad naizgled beskrajne mogućnosti platforme 1C. Već tradicionalno preporučujemo da obratite pažnju na naše tečajeve programiranja

Zašto se pojavljuje pogreška "Korištenje sinkronih metoda na klijentu je zabranjeno"?

Ako naiđete na takvu pogrešku tijekom dovršetka lekcija, vrlo ju je lako popraviti.

Vratite se u konfigurator i odaberite stavku izbornika "Konfiguracija" -> "Otvori konfiguraciju":

U prozoru koji se otvori desnom tipkom miša kliknite stavku "Konfiguracija" i odaberite "Svojstva" iz izbornika koji se otvori:

Otvorit će se prozor sa svojstvima konfiguracije (desno):

Pomaknite se do samog dna i tamo pronađite stavku "Modality mode":

Postavite njegovu vrijednost na "Koristiti":

Pažnja! Imajte na umu da ako koristite platformu 1C koja se razlikuje od one koju smo preuzeli u prvoj lekciji (kasnija verzija), tada ćete također imati polje "Način za korištenje sinkronih poziva...". Također je potrebno postaviti na "Upotreba".

Na kraju odaberite stavku izbornika "Konfiguracija" -> "Spremi konfiguraciju":

Spreman! Sada se greška više neće javljati.

Objašnjenja ispod - za one koje zanima što smo radili.

Omogućili smo način rada u našoj konfiguraciji. Prema zadanim postavkama, ovaj način je onemogućen i to nam ne dopušta korištenje naredbi kao što su EnterNumber, EnterString, EnterDate, OpenValue.

Činjenica je da su te naredbe modalne. Njihovim pozivanjem se pred korisnikom pojavljuje prozor (npr. za unos podataka) koji blokira mogućnost rada s programom dok se prozor ne zatvori.

A budući da je prisutnost takvih prozora krajnje nepoželjna pri radu s 1C putem web-preglednika, pri razvoju novih konfiguracija način modaliteta je prema zadanim postavkama isključen.

Ispis (Ctrl+P)

Rad s datotekama u asinkronom načinu rada prisutan je samo na strani klijentske aplikacije. Općenito, preporučuje se korištenje sinkronih metoda za rad na strani poslužitelja i asinkronih metoda za rad na strani klijentske aplikacije.
Razmotrimo primjer rada s datotekama u asinkronoj tehnici: brisanje svih datoteka u direktoriju privremenih datoteka. Za sinkronu tehnologiju ova će radnja izgledati ovako:

&NaKlijentu
Postupak Izbriši (naredba)
DeleteFiles(Imenik privremenih datoteka(), GetMaskAllClientFiles());

Kraj postupka
Asinkrona tehnika će izgledati drugačije:

&NaKlijentu
Postupak Izbriši (naredba)
Povratni poziv = Novo DescriptionAlerts(“GetTemporaryFileDirectoryCompletion”, ThisObject, “DeleteError”, ThisObject);
StartGettingTemporaryFileDirectory(Callback);
Kraj postupka
&NaKlijentu
Postupak GetTemporaryFileDirectoryCompletion(TemporaryFileDirectoryName, AdditionalParameters) Izvoz
Povratni poziv = Novo DescriptionAlerts(“DeleteCompletion”, ThisObject, “FileError”, ThisObject);
StartDeletingFiles(Callback, TemporaryFileDirectoryName, GetMaskAllClientFiles());
Kraj postupka
&NaKlijentu
Postupak DeleteComplete(AdditionalOptions) Export
Obavijesti (“Uklanjanje uspješno dovršeno”);
Kraj postupka
&NaKlijentu
Postupak FileError (ErrorInfo, StandardProcessing, AdditionalOptions) Izvoz
Izvješće(“Došlo je do pogreške tijekom izvođenja operacije datoteke: ” + BriefErrorIntroduction(ErrorInfo));
Kraj postupka

Prvo, treba napomenuti da su gotovo sve operacije s datotekama postale asinkrone. Čak i takav jednostavnih koraka poput dobivanja direktorija privremenih datoteka. A potreba za dobivanjem takvog imenika dovodi do prvog asinkronog poziva. Zatim se poziva stvarno brisanje svih datoteka. A rukovanje završetkom brisanja zahtijeva drugi rukovatelj, koji bi trebao sadržavati radnje koje bi se trebale dogoditi nakon što su sve datoteke u direktoriju privremenih datoteka izbrisane. U u ovom primjeru Ovo je poruka koja označava završetak operacije.
Ako dođe do pogreške tijekom izvođenja operacija datoteke, kontrola će se prenijeti na rukovatelja FileError(). Omogućuje vam da ispravno riješite trenutnu situaciju.

Rad s datotekama u web klijentu

Rad s datotekama u web klijentu ima niz značajki:
1. Bez instaliranja ekstenzija, u bilo kojem web pregledniku, dostupne su samo metode GetFile() i StartPlaceFile(). Metoda PlaceFile() nije podržana pri radu s web-preglednikom Google Chrome i ako konfiguracija ne dopušta korištenje modalnih metoda (svojstvo konfiguracije načina korištenja Modality, pogledajte ovdje).
2. Prilikom instaliranja ekstenzije za rad s datotekama u svim web preglednicima osim Google Chromea, dostupne su i sinkrone i asinkrone metode za rad s datotekama (sinkrone ili asinkrone ovisi o svojstvu konfiguracije Modality usage mode),
3. Za web preglednik Google Chrome dostupno je samo asinkrono proširenje za rad s datotekama. Sinkroni rad nije podržan.
4. Ekstenzija datoteke ne podržava rad preko HTTPS protokola korištenjem certifikata klijenta.
Napomena 1: Da bi proširenje za upravljanje datotekama ispravno radilo u web pregledniku Microsoft Internet Explorer preporučuje korištenje
Microsoft Core XML Services (MSXML) knjižnice verzija 4.0 ili 6.0.
Napomena 2. Ekstenzija datoteke za web preglednik Microsoft Internet Explorer instalirana je u direktoriju %APPDATA%\1C\1SEWebExt\FileSystemExtIE

"Korištenje modalnih prozora u ovaj način rada zabranjeno" - ova pogreška sada počinje smetati korisnicima i programerima 1C s dolaskom novog sučelja platforme 1C 8.3 - " ".

Programeri tehnološke platforme 1C idu u korak s vremenom, standardizirajući svoje rješenje prema svjetskim standardima razvoja softver. Svi se standardi na ovaj ili onaj način svode na jedno sučelje, blisko web stranicama.

Modalni i skočni prozori smatraju se lošim oblikom i odavno su prestali biti normalni u razvoju softvera. Korisnici su navikli raditi “u jednom prozoru”.

Posebno često vidimo pogrešku modaliteta u sljedećim 1C metodama:

  • Pitanje;
  • Upozorenje;
  • OpenValue.

Izdavanjem novog sučelja "taksi", programeri platforme 1C 8 donijeli su pravu odluku - pokušati prekvalificirati programere aplikacijskih rješenja na novi način. Uključili su u nova platforma prilika - “način korištenja modaliteta.”

Brzi popravak

Ako nemate vremena to shvatiti i trebate brzo riješiti problem, nudimo jednostavno, ali ne sasvim ispravno rješenje. Da biste brzo ispravili pogrešku, samo promijenite način rada u svojstvima konfiguracije.

Da biste to učinili, prijavite se u sustav u načinu rada, otvorite konfiguraciju:

U otvorenoj konfiguraciji pozovite kontekstni izbornik desnim klikom na korijen konfiguracije i odabirom “Svojstva”:

Besplatno nabavite 267 video lekcija o 1C:

Otvorit će se svojstva konfiguracije, gdje se u podnožju nalazi svojstvo koje nas zanima - "Modality use mode", odaberite način "Use":

Nakon toga spremite i primijenite promjene pritiskom na tipku “F7”.

Ispravno rješenje problema

Ispravan način rješavanja ovog problema je izmjena konfiguracije ili vanjska obrada novim zahtjevima.

Upozorenje, pitanje, dijaloški okviri i drugi modalni prozori - sve to treba prepisati na novi način.

Ugrađene operatore koji su pozivali modalne prozore potrebno je zamijeniti dupliciranim funkcijama.

Na primjer:

  • Upozorenje - ShowWarning;
  • Pitanje - ShowQuestion (detalji - );
  • — Prikaži ulazne brojeve.

Istodobno se pojavio specijalizirani objekt - Opis obavijesti.

Primjer zamjene:

Niz = "" ; Unesite niz (niz, "Unesite vrijednost niza") Obavijesti("Unijeli ste " + String) ;

Mora se zamijeniti sa:

Niz = "" ; DescriptionAlerts = Nova opisna upozorenja( "TestLineInput", Ova forma) ; ShowLineInput(DescriptionAlerts, String, "Unesite vrijednost niza") ;

U isto vrijeme dodajte sličnu proceduru na klijentu koja će raditi kada vrijednost unese korisnik:

&Na klijentskom postupku TestInputString(ReceivedValue, PassedParameters) Export Notify("Unijeli ste " + String) ; Kraj postupka

Forme koje se razvijaju unutar konfiguracije otvaraju se na isti način. Dovoljno je zamijeniti metodu “OpenFormModal” s “OpenForm”, navodeći opis upozorenja i novu proceduru potrebnu za njega.

Da biste blokirali pristup pozvanom obrascu otvaranjem obrasca, samo navedite vrijednost "Blokiraj prozor vlasnika" u svojstvu "Način otvaranja prozora" obrasca:

Ako ste aktivni korisnik softverski proizvod 1C, to je super. Program je stvarno dobar, omogućuje brzo i najkvalitetnije obavljanje više zadataka. Sve bi bilo u redu da nas povremeno ne šokira zastrašujućim porukama o nastalim greškama. Dobro je ako ste se s takvim pogreškama ranije susreli vi osobno ili oni koji rade pored vas i mogu prstima jasno objasniti kako riješiti problem, kao i objasniti zašto je nastao.

Problem se ispravlja nakon promjene postavki ili 1C koda.

Takav sadržaj informacija omogućit će vam vraćanje funkcionalnosti programa 1C, kao iu budućnosti izbjegavanje ozbiljnih pogrešaka koje izazivaju probleme.

Algoritam za ispravljanje pogrešaka u 1C

U 1C se također pojavljuje sljedeća pogreška: "Korištenje sinkronih metoda na klijentu je zabranjeno." Ne biste trebali paničariti ako se to dogodi; dovoljno je upravljati slijedom svojih radnji proučavajući vrijedne preporuke iskusnih korisnika.

Promjene postavki programa

Ako ste pokušali pozvati kontekstnu metodu u programu 1C, ali umjesto očekivanih naknadnih radnji na koje ste već navikli, iznenada se pojavila poruka da je upotreba sinkronih metoda na klijentu zabranjena, ne biste trebali paničariti, pokušajmo shvatiti ovaj softverski kvar.

Prvo kliknite na redak "Konfigurator". Nakon ovoga, na otvorenom kontekstni izbornik idite na posljednji redak "Svojstva", kliknite na njega. Sada će se otvoriti prozor u kojem možete samostalno napraviti neke promjene u postavkama, uključujući prilagodbe načina rada programa.

Među predloženim načinima pronađite redak "Način za korištenje sinkronih poziva proširenjima i vanjskim komponentama." Imajte na umu koja je vrijednost postavljena za ovaj način rada. Važno je da je odabrana opcija "Koristi". Ako vidite nešto drugačije, kliknite okvir za odabir i odaberite tu opciju.

Sada zatvorite sve otvorene prozore i ponovno pokušajte sve željene radnje. Vjerojatnost da ćete uspjeti je velika.

Promjena koda

Nažalost, nije uvijek moguće popraviti pogrešku "Korištenje sinkronih metoda na klijentu je zabranjeno" nakon izmjene postavki programa. Ponekad se morate baviti odgovornijim aktivnostima. Konkretno, napravite promjene u programskom kodu. Napredni korisnici Preporuča se korištenje asinkrone metode prijave ako sinkrona iznenada postane zabranjena.

Otvorite programski kod. Ostavite naziv procedure (Procedure OpenLiFile1()) i njen kraj (EndProcedure) nepromijenjene, ali radikalno promijenite tijelo procedure.

Morate napisati samo tri retka:

Upozorenje = New AlertDescription("RecordOrMore",ThisObject);
QuestionText = “Zapisati?”;
ShowQuestion(Alert, QuestionText, DialogModeQuestion.YesNo);

Ako ne razumijete apsolutno ništa o ovome, nema problema, samo kopirajte i zalijepite između naziva procedure i njenog završnog retka. Zaista vjerujemo da će kada izvršite takve radnje sve doći na svoje mjesto i program će ponovno raditi, omogućujući vam da sve radnje obavljate na visokoj profesionalnoj razini.