Come configurare smartphone e PC. Portale informativo
  • casa
  • Consiglio
  • Perché si verifica l'errore "L'utilizzo di metodi sincroni sul client è vietato"? È vietato l'utilizzo di metodi sincroni sul client 1s.

Perché si verifica l'errore "L'utilizzo di metodi sincroni sul client è vietato"? È vietato l'utilizzo di metodi sincroni sul client 1s.

"L'uso di finestre modali in questa modalità è vietato" - questo errore inizia ora a disturbare utenti e programmatori 1C con l'arrivo della nuova interfaccia della piattaforma 1C 8.3 - " ".

Gli sviluppatori della piattaforma tecnologica 1C stanno al passo con i tempi, standardizzando la loro soluzione agli standard internazionali di sviluppo software. Tutti gli standard in un modo o nell'altro si riducono a un'unica interfaccia, vicino alle pagine web.

Le finestre modali e pop-up sono considerate una cattiva forma e hanno da tempo cessato di essere normali nello sviluppo del software. Gli utenti sono abituati a lavorare “in una finestra”.

Soprattutto spesso vediamo un errore di modalità nei seguenti metodi 1C:

  • Domanda;
  • Avvertimento;
  • OpenValue.

Con il rilascio della nuova interfaccia "taxi", gli sviluppatori della piattaforma 1C 8 hanno preso la decisione giusta: provare a riqualificare gli sviluppatori di soluzioni applicative in un modo nuovo. Hanno incluso una funzionalità nella nuova piattaforma: la "modalità modalità".

Soluzione rapida

Se non hai tempo per capirlo e devi risolvere rapidamente il problema, offriamo una soluzione semplice, ma non del tutto corretta. Per correggere rapidamente l'errore, basta cambiare la modalità nelle proprietà di configurazione.

Per fare ciò, accedi al sistema in modalità, apri la configurazione:

In una configurazione aperta, richiamare il menu contestuale facendo clic con il tasto destro sulla radice della configurazione e selezionando "Proprietà":

Ottieni 267 lezioni video su 1C gratuitamente:

Si apriranno le proprietà di configurazione, dove nel footer è presente la proprietà che ci interessa - “Modalità modalità utilizzo”, selezionare la modalità “Utilizzo”:

Successivamente, salva e applica le modifiche premendo il tasto “F7”.

Soluzione corretta al problema

Il modo corretto per risolvere questo problema è modificare la configurazione o l'elaborazione esterna per soddisfare i nuovi requisiti.

Avvisi, domande, finestre di dialogo e altre modalità devono essere riscritte in un modo nuovo.

Gli operatori integrati che chiamavano finestre modali devono essere sostituiti con funzioni duplicate.

Per esempio:

  • Avviso: mostra avviso;
  • Domanda - MostraDomanda (dettagli - );
  • — Mostra numeri di input.

Allo stesso tempo è apparso un oggetto specializzato: Descrizione della notifica.

Esempio di sostituzione:

Stringa = "" ; EnterString(Stringa, "Inserisci un valore stringa") Notifica("Hai inserito " + String) ;

Deve essere sostituito con:

Stringa = "" ; DescrizioneAvvisi = Nuova DescrizioneAvvisi( "InputLineTest", Questa forma) ; ShowLineInput(DescrizioneAvvisi, Stringa, "Inserisci un valore stringa") ;

Allo stesso tempo, aggiungi una procedura simile sul client che funzionerà quando il valore verrà inserito dall'utente:

&Nella procedura client TestInputString(ReceivedValue, PassedParameters) Export Notify("Hai inserito " + String) ; Fine della procedura

I moduli sviluppati all'interno della configurazione vengono aperti allo stesso modo. È sufficiente sostituire il metodo “OpenFormModal” con “OpenForm”, specificando una descrizione dell'avviso e la nuova procedura richiesta per esso.

Per bloccare l'accesso al form richiamato aprendo un form è sufficiente specificare il valore “Blocca finestra proprietaria” nella proprietà “Modalità apertura finestra” del form:

Stampa (Ctrl+P)

L'utilizzo dei file in modalità asincrona è presente solo sul lato dell'applicazione client. In generale, si consiglia di utilizzare metodi sincroni per lavorare sul lato server e metodi asincroni per lavorare sul lato applicazione client.
Consideriamo un esempio di lavoro con i file in una tecnica asincrona: eliminare tutti i file nella directory dei file temporanei. Per la tecnologia sincrona, questa azione sarà simile alla seguente:

&SuClient
Procedura Elimina (comando)
EliminaFiles(Directory dei file temporanei(), GetMaskAllClientFiles());

Fine della procedura
La tecnica asincrona avrà un aspetto diverso:

&SuClient
Procedura Elimina (comando)
Richiamata = Nuovo DescrizioneAlerts("GetTemporaryFileDirectoryCompletion", ThisObject, "DeleteError", ThisObject);
StartGettingTemporaryFileDirectory(Callback);
Fine della procedura
&SuClient
Procedura GetTemporaryFileDirectoryCompletion(TemporaryFileDirectoryName, AdditionalParameters) Esportare
Richiamata = Nuovo DescrizioneAvvisi("DeleteCompletion", ThisObject, "FileError", ThisObject);
StartDeletingFiles(Callback, TemporaryFileDirectoryName, GetMaskAllClientFiles());
Fine della procedura
&SuClient
Procedura EliminaComplete(Opzioniaggiuntive) Esporta
Notifica("Rimozione completata con successo");
Fine della procedura
&SuClient
Procedura FileError (ErrorInfo, StandardProcessing, AdditionalOptions) Esportare
Report("Si è verificato un errore durante l'esecuzione di un'operazione sul file: " + BriefErrorIntroduction(ErrorInfo));
Fine della procedura

Innanzitutto, va notato che quasi tutte le operazioni sui file sono diventate asincrone. Anche qualcosa di semplice come ottenere una directory di file temporanei. E la necessità di ottenere tale directory porta alla prima chiamata asincrona. Quindi viene chiamata l'effettiva cancellazione di tutti i file. Inoltre, la gestione del completamento dell'eliminazione richiede un secondo gestore, che dovrebbe ospitare le azioni che dovrebbero verificarsi dopo che tutti i file nella directory dei file temporanei sono stati eliminati. In questo esempio, si tratta di emettere un messaggio relativo al completamento dell'operazione.
Se si verifica un errore durante l'esecuzione di operazioni sui file, il controllo verrà trasferito al gestore Errore file(). Ti consente di gestire correttamente la situazione attuale.

Lavorare con i file nel client web

Lavorare con i file nel client Web ha una serie di funzionalità:
1. Senza installare estensioni, in qualsiasi browser Web sono disponibili solo i metodi GetFile() e StartPlaceFile(). Il metodo PlaceFile() non è supportato quando si lavora con il browser web Google Chrome e se la configurazione non consente l'uso di metodi modali (la proprietà di configurazione della modalità di utilizzo Modality, vedere qui).
2. Quando si installa l'estensione per lavorare con i file in tutti i browser Web ad eccezione di Google Chrome, sono disponibili metodi sia sincroni che asincroni per lavorare con i file (sincrono o asincrono dipende dalla proprietà di configurazione della modalità di utilizzo Modalità),
3. Per il browser web Google Chrome è disponibile solo un'estensione asincrona per lavorare con i file. L'operazione sincrona non è supportata.
4. L'estensione del file non supporta il funzionamento sul protocollo HTTPS utilizzando un certificato client.
Nota 1: per il corretto funzionamento dell'estensione per la gestione dei file nel browser Web Microsoft Internet Explorer, si consiglia di utilizzare
Librerie Microsoft Core XML Services (MSXML) versione 4.0 o 6.0.
Nota 2. L'estensione del file per il browser Web Microsoft Internet Explorer è installata nella directory %APPDATA%\1C\1СEWebExt\FileSystemExtIE

Se sei un utente attivo di un prodotto software 1C, è fantastico. Il programma è davvero buono, ti consente di eseguire più attività rapidamente e con la massima qualità possibile. Andrebbe tutto bene se di tanto in tanto non ci scioccasse con messaggi terrificanti sugli errori che si sono verificati. È positivo se tali errori siano stati riscontrati in precedenza da te personalmente o da coloro che lavorano accanto a te e possano spiegare chiaramente con le dita come risolvere il problema, oltre a spiegare perché si è verificato.

Il problema viene corretto dopo aver modificato le impostazioni o il codice 1C.

Tale contenuto informativo consentirà di ripristinare la funzionalità del programma 1C e in futuro di evitare errori gravi che provocheranno problemi.

Algoritmo per correggere gli errori in 1C

In 1C viene visualizzato anche il seguente errore: "È vietato l'uso di metodi sincroni sul client". Non dovresti farti prendere dal panico se ciò accade; è sufficiente navigare nella sequenza delle tue azioni studiando i preziosi consigli degli utenti esperti.

Apportare modifiche alle impostazioni del programma

Se hai provato a chiamare un metodo di contesto in un programma 1C, ma invece delle azioni successive previste a cui sei già abituato, improvvisamente è apparso un messaggio che informa che l'uso di metodi sincroni sul client è vietato, non dovresti farti prendere dal panico, proviamo a capire questo errore del software.

Inizialmente, fare clic sulla riga "Configuratore". Successivamente, nel menu contestuale aperto, vai all'ultima riga "Proprietà", fai clic su di essa. Ora si aprirà una finestra in cui potrai apportare autonomamente alcune modifiche alle impostazioni, comprese le modifiche alla modalità operativa del programma.

Tra le modalità proposte troviamo la riga “Modalità per l'utilizzo delle chiamate sincrone verso interni e componenti esterni”. Si prega di notare quale valore è impostato per questa modalità. È importante che sia selezionata l'opzione "Usa". Se vedi qualcosa di diverso, fai clic sulla casella di selezione e seleziona l'opzione.

Ora chiudi tutte le finestre aperte e riprova tutte le azioni desiderate. La probabilità che tu abbia successo è alta.

Modifica del codice

Sfortunatamente, non è sempre possibile correggere l'errore "L'uso di metodi sincroni sul client è vietato" dopo aver apportato modifiche alle impostazioni del programma. A volte devi svolgere attività più responsabili. In particolare, apportare modifiche al codice del programma. Gli utenti esperti consigliano di utilizzare il metodo di accesso asincrono se quello sincrono diventa improvvisamente proibito.

Apri il codice del programma. Lasciamo invariato il nome della procedura (Procedure OpenLiFile1()) e la sua fine (EndProcedure), ma modifichiamo radicalmente il corpo della procedura.

Devi solo scrivere tre righe:

Avviso = Nuova descrizione avviso("RecordOrMore",ThisObject);
QuestionText = “Scrivi?”;
ShowQuestion(Alert, QuestionText, DialogModeQuestion.YesNo);

Se non ne capisci assolutamente nulla, nessun problema, basta copiare e incollare tra il nome della procedura e la sua riga finale. Crediamo davvero che quando esegui tali azioni, tutto andrà a posto e il programma funzionerà di nuovo, consentendoti di eseguire tutte le azioni ad un livello professionale elevato.

Implementato nella versione 8.3.5.1383, 8.3.6.1977.

Tendenze moderne

Le tendenze di sviluppo del browser portano a una percentuale sempre maggiore di “asincronia” nella piattaforma. Il primo passo è stato. Ora sono disponibili chiamate asincrone per lavorare con estensioni di crittografia, lavorare con file e componenti esterni.

Il motivo del successivo passo verso l'asincronia è stato il fatto che gli sviluppatori del browser Google Chrome hanno abbandonato il supporto per la precedente tecnologia NPAPI (Netscape Plugin Application Programming Interface). Questa tecnologia è stata utilizzata per collegare moduli esterni - estensioni - al browser.

Tali estensioni sono esattamente ciò che 1C:Enterprise utilizza per lavorare con la crittografia, per lavorare con i file e per connettere componenti esterni. Questa è una funzionalità piuttosto importante. La crittografia viene utilizzata nella gestione dei documenti elettronici e, grazie a componenti esterni, le applicazioni possono funzionare con lettori di codici a barre e altre apparecchiature di vendita al dettaglio.

E ora, al posto della precedente tecnologia NPAPI sincrona, gli sviluppatori di Google Chrome hanno creato una nuova tecnologia di messaggistica nativa. Allo stesso tempo, hanno fortemente raccomandato a tutti gli sviluppatori di estensioni di non utilizzare la vecchia tecnologia, perché non sarà supportata.

Senza entrare nei dettagli, la nuova tecnologia è migliore e più sicura. Questo è buono. Ma una delle sue differenze significative è che fornisce un'interazione esclusivamente asincrona con le estensioni del browser. E ciò richiede un cambiamento radicale in tutti i metodi esistenti di lavoro con estensioni e componenti esterni in 1C:Enterprise. Perché sono tutti basati sull'interazione sincrona.

Metodi asincroni

Abbiamo risolto questo problema nello stesso modo in cui abbiamo risolto il problema delle chiamate modali. Per tutti i metodi sincroni che utilizzano la tecnologia NPAPI, abbiamo creato le loro controparti asincrone. Differiscono principalmente per la presenza del prefisso Inizio e il fatto che il primo parametro venga loro passato DescrizioneAvvisi, da cui l'esecuzione del codice del programma continuerà dopo il completamento dell'azione richiamata.

Ad esempio, invece del metodo Crittografa() Ora consigliamo di utilizzare il metodo IniziaCrittografa():

Gestore crittografia.Encrypt(<ИсходныеДанные>, <Получатели>) Gestore crittografia.Avvia crittografia(<ОписаниеОповещения>, <ИсходныеДанные>, <Получатели>)

Invece di un metodo OttieniFile() - Inizia a ricevere file():

OttieniFile(<ПолучаемыеФайлы>, <ПолученныеФайлы>, <РасположениеФайлов>, <Интерактивно>) Inizia a ricevere file ((<ОписаниеОповещения>, <ПолучаемыеФайлы>, <РасположениеФайлов>, <Интерактивно>)

Invece di ImpostaComponenteEsterno()- AvviaInstallazioneComponentiEsterni():

ImpostaComponenteEsterno(<Местоположение>) Avviare l'installazione dei componenti esterni (<ОписаниеОповещенияОЗавершении>, <Местоположение>)

In effetti, nel complesso, tutto è molto simile a quello che facevamo prima, quando ci siamo sbarazzati della modalità. Ma il funzionamento dei nuovi metodi asincroni ha una caratteristica essenziale che i metodi che causano dialoghi non modali non hanno.

Quando si chiama una finestra di dialogo non modale in modo asincrono, ci si aspetta solo una reazione dell'utente e niente di più. Nel senso che non può accadere nulla di imprevisto.

E nel processo di chiamata di metodi asincroni di lavoro con estensioni e componenti, possono sorgere situazioni eccezionali. L'estensione non è stata installata, il componente non è stato caricato, ecc.

In genere la gestione di tali eccezioni viene fornita nel codice dell'applicazione. Utilizzando un operatore Ci sto provando... Eccezione. Ma ora questo diventa impossibile, perché al momento della chiamata asincrona il codice dell'applicazione non viene eseguito. Di conseguenza, l'operatore non funziona Ci sto provando... Eccezione.

  • NomeProcedureProcessingErrors;
  • ModuloErroreProcessing.

Se qualcosa va storto durante una chiamata asincrona e si verifica un'eccezione, verrà eseguita la procedura a cui puntano queste proprietà. Ha senso utilizzare queste due proprietà solo nei metodi asincroni di lavoro con le estensioni. Quando si richiamano finestre di dialogo non modali, queste proprietà non sono necessarie.

Proprietà di configurazione

Come nel caso del rifiuto della modalità, l’intera soluzione applicativa nel suo insieme deve sapere “di cosa si tratta”. O è modale o non modale. O è sincrono o asincrono.

In precedenza, per risolvere il problema con la modalità, abbiamo aggiunto una proprietà di configurazione speciale Modalità di utilizzo. Ora, per risolvere il problema della sincronicità, abbiamo aggiunto una proprietà simile nel significato Modalità di utilizzo delle chiamate sincrone verso interni e componenti esterni.

L'essenza del suo utilizzo è la seguente:

  • Non usare- questa è una nuova modalità operativa asincrona. Per le nuove configurazioni questa è la modalità standard. È vietato utilizzare metodi vecchi e sincroni. Non superano il controllo sintattico, non sono nell'indizio del contesto. Un tentativo di eseguire un metodo sincrono genera un'eccezione.
  • Utilizzare con avvertenza- questa modalità è destinata allo sviluppatore. Non impedisce l'uso di metodi sincroni più vecchi. Ma ogni volta che viene chiamato un metodo sincrono sul client, viene prodotto un messaggio di avviso. Si consiglia di utilizzare questa modalità nelle configurazioni di “riciclo”. È utile per cercare visivamente le chiamate sincrone e monitorarle durante il processo di revisione.
  • Utilizzo- una modalità che garantisce la compatibilità della nuova versione della piattaforma con le vecchie configurazioni che utilizzano metodi sincroni per lavorare con estensioni e componenti esterni.

Tutti i metodi e le proprietà di cui abbiamo parlato finora sono implementati nella versione 8.3.5.1383 . Puoi utilizzarli nelle tue soluzioni applicative. E gli sviluppatori, ad esempio, passeranno a sottosistemi operativi asincroni che utilizzano strumenti di crittografia, lavorano con file e componenti esterni.

Naturalmente, come per le chiamate modali, probabilmente hai una domanda. Devo rifare la mia soluzione applicativa? E in generale, devo utilizzare questi metodi asincroni nella mia nuova soluzione applicativa?

Quando è necessario?

La risposta a questa domanda è essenzialmente la stessa che abbiamo dato prima. Quando parlavano di abbandonare la modalità.

In primo luogo, non tutte le versioni della piattaforma tecnologica supportano la modalità di chiamate asincrone a interni e componenti esterni. Questa modalità operativa esiste a partire dalla versione 8.3.5.1383. Pertanto, se stai lavorando su versioni precedenti della piattaforma, per ora non devi preoccuparti di abbandonare i metodi sincroni.

In secondo luogo, non tutte le soluzioni applicative devono necessariamente utilizzare questa modalità. Le applicazioni critiche sono quelle con cui si lavorerà utilizzando il client Web nel browser Google Chrome. Tali applicazioni, in gran parte, sono applicazioni che eseguono . Se la tua soluzione applicativa non verrà sicuramente utilizzata in questa modalità, per ora non puoi abbandonare i metodi sincroni.

Tuttavia, nonostante il primo e il secondo punto, ci sono tendenze globali che potrebbero influenzare i tuoi piani. Noi, l'azienda 1C, sviluppiamo tutte le soluzioni standard in base al fatto che possono essere utilizzate in uno qualsiasi dei modi disponibili. Pertanto, implementeremo nuove soluzioni applicative, così come tutte le librerie in esse utilizzate, in modalità senza utilizzare chiamate sincrone.

Ciò significa che è meglio per te iniziare subito a padroneggiare questa modalità operativa. Anche se la tua applicazione potrebbe non utilizzarlo ancora, ti consigliamo di iniziare subito la traduzione, se possibile. Tuttavia, ti invitiamo ad affrontare questo processo in modo creativo. Allo stesso modo di quando si abbandona la modalità. Cioè, non è necessario sostituire meccanicamente i metodi sincroni con quelli asincroni. In primo luogo, è utile pensare se sia possibile modificare l'algoritmo o lo script in modo tale da abbandonare completamente l'uso di metodi sincroni in questo luogo?

Refactoring

Da un lato, se la configurazione è grande e contiene molte chiamate sincrone, la rielaborazione "manuale" di tale configurazione può essere un compito che richiede molto tempo.

D'altro canto, a partire dalla versione 8.3.5.1068, la piattaforma dispone di funzionalità che consentono di convertire le chiamate sincrone nelle loro controparti asincrone.

Pertanto, abbiamo preso questi strumenti già esistenti, li abbiamo ampliati e riorientati dall’“allontanamento dalla modalità” alla “transizione all’asincronia”. Fondamentalmente, la transizione ai metodi asincroni è simile alle azioni eseguite quando si abbandona la modalità. Le chiamate vecchie, “fuori moda”, sincrone (modali) devono essere sostituite con nuove chiamate asincrone, “fuori moda”, che utilizzano Elaborazione degli avvisi.

In questa forma aggiornata, gli strumenti di refactoring sono diventati disponibili nella versione 8.3.6.1977 .

Poiché l'"enfasi" di questi strumenti si è spostata verso l'asincronia, abbiamo rinominato alcuni comandi. Invece di "non modale", ora viene utilizzata la frase "sincrono deprecato":

Inoltre, abbiamo aggiunto una nuova scheda alle impostazioni del configuratore Refactoring. Per impostazione predefinita, entrambe le trasformazioni sono abilitate. Ma, se ne hai bisogno, con il suo aiuto puoi eseguire solo uno dei tipi di trasformazioni durante il refactoring automatico.

I migliori articoli sull'argomento