Come configurare smartphone e PC. Portale informativo
  • casa
  • Errori
  • Compiti pianificati in 1s 8.3. Attività in background: caratteristiche, capacità, personalizzazione

Compiti pianificati in 1s 8.3. Attività in background: caratteristiche, capacità, personalizzazione

". In esso, prenderemo in considerazione nuove funzionalità che non riguardano l'interfaccia di sistema, ma espandono in modo significativo le funzionalità fornite della piattaforma 1C: Enterprise 8.

Applicabilità

L'articolo discute 1C: versione piattaforma Enterprise 8.3.4.437. Tutte le funzionalità descritte nell'articolo sono state aggiornate alla versione 8.3.11.

Altre novità in "1C: Enterprise 8.3"

Continuiamo a conoscere le innovazioni della piattaforma 1C: Enterprise 8.3.

Attività in background e pianificate nell'infobase dei file

In molte configurazioni tipiche della piattaforma 8.2 c'era una costante che indicava l'utente sotto il quale venivano eseguite le attività nella versione del file.

Quando il sistema ha iniziato a funzionare con questo utente, è stato connesso un gestore di attesa, che ha chiamato il metodo della lingua incorporata a intervalli regolari RunProcessingJobs ().

Questo approccio ha creato ulteriori difficoltà e inconvenienti per l'utilizzo di lavori pianificati nel database dei file.

Questo potrebbe essere particolarmente critico quando si ha a che fare con configurazioni come "Automazione Integrata" o "Gestione dell'impresa manifatturiera", in cui le attività pianificate svolgono un ruolo piuttosto importante.

Se è il file IB allora
=
Constants.UserForRunningRoutineTasksIn FileVariant.Get();
Se hlValueVariable("GlCurrentUser") =
UserForPerformanceReglTasks Poi
// con un intervallo di secondi, chiama la procedura per lavorare con i lavori pianificati
Supporta il lavoro regolare per la versione del file();
Intervallo per sondaggio=
Constants.IntervalFor PollingRegularJobsIn FileVariant.Get();
Se Intervallo per sondaggio= Indefinito
O Intervallo per sondaggio= 0 Allora
Intervallo per sondaggio= 60 ;
Finisci se;
ConnectHandlerAspettative("SupportRegular JobForFileVersion",
Intervallo per sondaggio);
Finisci se;
Finisci se;

Nella piattaforma 8.3 implementato il lavoro dei lavori in background e pianificati nell'infobase del file senza utilizzare una chiamata al metodo del contesto globale RunProcessingJobs ().

I lavori in background e pianificati vengono eseguiti direttamente in una delle applicazioni client (thin, thick client) o in un'estensione del server Web.

Un lavoro in background avviato da una sessione viene eseguito dalla stessa applicazione client che lo ha avviato.

I lavori in background vengono eseguiti in sequenza, ad es. solo un'attività in background (inclusa quella pianificata) può essere eseguita su un'applicazione client alla volta.

I lavori pianificati vengono eseguiti da una sola applicazione client. Per controllare l'avvio dei lavori pianificati, utilizzare il tasto della riga di comando / AllowExecuteScheduledJobs.

Le attività pianificate vengono eseguite dalla prima applicazione client nell'ordine di avvio, a cui non è vietato eseguire attività pianificate (per disabilitare la sessione deve essere avviata con il parametro della riga di comando / AllowExecuteScheduledJobs -Off).

Al termine di questa sessione, l'esecuzione passa a una delle restanti sessioni in esecuzione.

Se la riga di avvio dell'applicazione client indica esplicitamente la necessità di eseguire lavori pianificati (la riga di comando specifica / AllowExecuteScheduledJobs -Force), quindi le attività pianificate iniziano ad essere eseguite su di esso, indipendentemente dalla presenza di altre sessioni.

I lavori pianificati vengono elaborati una volta ogni 60 secondi.

Si noti che le attività pianificate della soluzione applicata (nella versione file) hanno iniziato a essere eseguite non prima di 1 minuto dopo l'avvio dell'applicazione client. A partire dalla versione 8.3.8, questo tempo è stato raddoppiato e quindi le attività pianificate iniziano a essere eseguite al massimo 2 minuti dopo l'avvio del client (nella versione file).

Questa decisione è dovuta a una diminuzione del ritardo all'inizio della domanda. Inoltre, la versione 8.3.7 ha aggiunto la possibilità di determinare rapidamente che la sessione corrente è una sessione di lavoro in background. Questo viene implementato tramite il nuovo metodo del contesto globale GetCurrentSessionInformationBase(), nonché un nuovo metodo della sessione infobase Ottieni lavoro in background ().

Di seguito è riportato il codice che illustra quanto sopra:

Clicca sull'immagine per ingrandirla.

Calcolo dei checksum

Nella piattaforma sono comparsi meccanismi per il calcolo dei checksum dei dati.

Ricordiamo che un checksum (hash) è un determinato valore calcolato da un insieme di dati applicando un determinato algoritmo e utilizzato per verificare l'integrità dei dati durante la trasmissione o l'archiviazione.

Gli hash possono essere utilizzati per verificare l'identità dei dati (ad esempio, è necessario assicurarsi che il file non sia stato danneggiato durante il trasferimento; controllare se sono state apportate modifiche al file e, in tal caso, caricarlo nuovamente nel database) .

Per questo, la piattaforma ha implementato l'oggetto HashingData disponibile sul server, nel thick client, nella connessione esterna e anche sul server dell'app mobile.

Questo oggetto ha due metodi: Aggiungere() e Aggiungi file() che aggiornano la somma hash in base ai dati passati nei parametri.

piattaforma 8.3.4.437 supporta il calcolo delle seguenti funzioni hash: CRC32, MD5, SHA1, SHA256... Ma le funzioni SHA1 e SHA256 non supportato sulla piattaforma mobile.

Diamo un'occhiata a un semplice esempio. Si presume che sul server nella directory del programma ci sia un file " ragent.exe”. bisogno di calcolare MD5è la somma per questo file.

Per fare ciò, creeremo un'elaborazione esterna, sulla cui forma posizioneremo il comando Calcolare... Il gestore contiene il seguente codice:

& su client
Calcola procedura (comando)
Risultato = Calcola sul server();
Rapporto (Stringa (Risultato));
Fine della procedura
&Sul server
Funzione Calcola sul server()
Hash = Nuovo HashingData(Funzione Hash .MD5);
Hash.AddFile(CatalogoProgrammi() + “Ragent.exe”);
Restituire Hash.HashSum;
EndFunction

Nella piattaforma dell'edizione 8.3.10+ nel metodo Aggiungere() oggetto HashingDataè diventato possibile utilizzare un flusso di dati binari, che ha notevolmente semplificato il loro utilizzo nella risoluzione di vari problemi applicati di aggiornamento delle somme hash.

Lavorare con versioni sicure dei protocolli SMTP/POP3

Nella piattaforma 8.3 è diventato possibile utilizzare versioni protette dei protocolli SMTP/POP3(ci sono termini SMTPS / POP3S o SSLSMTP / SSLPOP3).

Per oggetto InternetProfiloPostale implementate nuove proprietà:

  • Usa SSLSMTP;
  • UsaSSLPOP3;
  • Solo autenticazione sicura SMTP;
  • Solo autenticazione sicura POP3.

Proprietà AutenticazioneSMTP e Autenticazione POP3 oggetto InternetProfiloPostale così come le enumerazioni Metodo di autenticazione SMTP e Metodo di autenticazione POP3 non consigliato: sono supportati per la compatibilità.

Utilizzo di un protocollo sicuro SMTPS permette di inviare posta da 1C usando la casella di posta Google.

Diamo un'occhiata a un esempio. Sul modulo posizioneremo i campi per inserire l'oggetto della lettera e l'indirizzo del destinatario e per inserire il testo della lettera - il campo per il documento formattato.

Clicca sull'immagine per ingrandirla.

Premendo il pulsante Inviare verrà eseguito il seguente codice:

& su client
Procedura Invia (comando) Posta = Nuova posta Internet; Profilo = Nuovo InternetProfiloPostale;
Profilo.Indirizzo server SMTP= “Smtp.googlemail.com”;
Profilo Utente SMTP= “[e-mail protetta]” ;
Profilo.Password SMTP= “PASSWORD”;
Profilo: usa SSLSMTP= Vero;
Profilo.Porta SMTP = 465; Tentativo
Mail.Connect(Profilo);
Un'eccezione
Segnala (Descrizione Bug ());
Ritorno ;
Fine dei tentativi; MailMessageText= “” ;
Allegati = Nuova Struttura;
Testo.Ottieni HTML(MailMessageText, Allegati ); Messaggio di posta= Nuovo InternetMessaggio postale;
MailMessage.Recipients.Add(A cui );
Oggetto del messaggio di posta= Soggetto;
Messaggio di posta. Testi. Aggiungi(MailMessageText,
MailMessageType.html); Posta. Invia ( Messaggio di posta); Disconnessione posta();
Fine della procedura

Nota che nel nostro esempio, se il server SMTP non è stato in grado di inviare un messaggio di posta elettronica al destinatario (s), allora il metodo Mail.Send (MailMessage) stava lanciando un'eccezione. Ciò ha causato alcuni inconvenienti tra gli sviluppatori. la ragione per lanciare l'eccezione non era ovvia.

In 8.3.9, questo comportamento è cambiato e ora il metodo Send() restituisce una corrispondenza, la cui chiave è il destinatario e il valore è la diagnostica dal server di posta. Ciò consente di determinare con precisione i motivi dell'invio non riuscito del messaggio di posta a ciascuno dei destinatari. Nella modalità di compatibilità 8.3.8, il comportamento non è cambiato.

Stampa fronte/retro

Nella piattaforma 8.2 la piattaforma stessa non controllava la stampa fronte/retro, era possibile gestire questa funzione solo tramite il driver della stampante.

Nella piattaforma 8.3 è ora possibile gestire la stampa fronte-retro per un foglio di calcolo, un diagramma grafico (dal linguaggio integrato e in modo interattivo) e un documento di testo (solo in modo interattivo).

Le enumerazioni di sistema sono apparse nel linguaggio integrato:

  • TipoStampa fronte-retro(No, capovolgi su, capovolgi a sinistra);
  • (Auto, Specchio in alto, Specchio a sinistra, Non usare).

E gli oggetti Documento tabulare e Diagramma grafico proprietà apparse Stampa fronte/retro e InterleavingPagina Arrangiamenti con cui è possibile modificare la posizione delle pagine stampate.

Nella versione della piattaforma 8.3.9, il sistema enumerationTypeDouble-SidedPrint ha un nuovo valore UsaImpostazioni stampante... La selezione di questo valore ha consentito l'utilizzo delle impostazioni della stampante durante la stampa dei documenti di sistema. Nella modalità di compatibilità della versione 8.3.8, il comportamento non è cambiato e le impostazioni della stampante corrispondenti vengono ignorate.

La finestra di dialogo per la pubblicazione di un'infobase su un server web è stata resa più funzionale. Ora la pubblicazione dal configuratore ti consente di impostare tutti i parametri del file default.vrd.

Per la finestra di dialogo per la pubblicazione di un web client e servizi web tramite configuratore è implementato quanto segue:

  • la capacità di controllare la disponibilità dei servizi Web per impostazione predefinita (attributo pointEnableCommon elemento wow);
  • la capacità di controllare l'esecuzione dei lavori in background nella versione del file (attributo consenti l'esecuzione di lavori programmati elemento wow).

Se la casella di controllo "Pubblica servizi Web per impostazione predefinita" sul segnalibro "Di base"è selezionato, i servizi Web selezionati verranno pubblicati automaticamente quando la pubblicazione viene aggiornata.

In caso contrario, i servizi Web verranno contrassegnati come non pubblicati. Questo flag corrisponde all'attributo pointEnableCommon elemento wow in file default.vrd per la configurazione del client Web e dei servizi Web.

Attributo pointEnableCommon l'elemento wsèresponsabile della possibilitàdi utilizzare in questa infobase servizi Web che sono pubblicati senza specificare esplicitamente l'autorizzazione all'uso (attributo abilitare elemento punto).

Se l'attributo ha un valore vero, quindi tutti i servizi Web per i quali il valore dell'attributo non è specificato esplicitamente abilitare elemento punto sarà consentito l'uso.

In caso contrario, sarà vietato l'uso di tali servizi Web.

personalizzazione "Lavori in background in modalità file" corrisponde all'attributo consenti l'esecuzione di lavori programmati ws elemento nel file default.vrd.

Attributo consenti l'esecuzione di lavori programmati controlla la capacità di eseguire attività di routine estendendo il server Web per l'infobase basata su file.

L'attributo può assumere i seguenti valori:

  • spento- in questo caso, l'estensione del server web non eseguirà le attività pianificate. Le attività pianificate verranno eseguite dall'applicazione client (se esistente), che si collega direttamente all'infobase, senza utilizzare un server web.
  • forza- in questo caso, l'estensione del server Web eseguirà le attività pianificate.
    Se il valore di questo attributo non è specificato, le attività pianificate verranno eseguite dall'applicazione che verrà utilizzata per la prima connessione all'infobase.

La finestra per la pubblicazione sul servizio web nell'attuale versione della piattaforma è diventata ancora più comoda ed ergonomica. Ora i parametri che descrivono l'autenticazione OpenID sono stati spostati in una scheda separata.

Numerazione degli oggetti dell'infobase

Nella piattaforma 8.3 è stato ridisegnato il meccanismo di numerazione automatica degli oggetti infobase. Il controllo dell'univocità del numero o codice (compreso quello ottenuto a seguito della generazione automatica del numero o codice) viene sempre effettuato durante la registrazione dell'oggetto.

Un'indicazione di quale numero o codice non è univoco è stata aggiunta al testo di un messaggio relativo alla violazione dell'unicità di un numero o codice.

L'uso del numero o del codice lasciato libero è cambiato. Un nuovo numero o codice viene assegnato senza utilizzare i numeri o codici lasciati, se sono già stati emessi numeri o codici con un prefisso maggiore (in ordine) del numero o del codice.

Funzioni aggregate del linguaggio di espressione del sistema di composizione dei dati

Nuove funzioni aggregate sono implementate nel linguaggio delle espressioni del sistema di composizione dei dati:

  • Ogni();
  • Qualsiasi();
  • GeneralCollection StandardDeviation ();
  • SampleDefusion ();
  • SampleDispersion ();
  • GeneralCollection Dispersion ();
  • GeneralCollection Covariance ();
  • Covarianza del campione ();
  • Correlazione();
  • Pendenza di regressione ();
  • RegressionSegment ();
  • NumeroRegressione ();
  • Regressione R2 ();
  • RegressionAverageX ();
  • RegressionAverageY ();
  • RegressionAverageSXX ();
  • RegressionAverageSYY ();
  • Regressione Media SXY ().

Come suggeriscono i nomi, si tratta di funzioni statistiche, il che significa che gli sviluppatori hanno l'opportunità di creare report complessi senza ricorrere allo sviluppo di procedure per il calcolo dei dati statistici.

Clicca sull'immagine per ingrandirla.

Come puoi vedere dalla figura, non ci sono nuove funzioni nell'elenco a discesa, ma se le inserisci manualmente, non ci sarà alcun messaggio di errore e verrà generato il report:

Interessante anche la nuova funzione Classificazione ABC ()... Il risultato della funzione sarà un numero di classe, a partire da 1 (1 corrisponde alla classe A, 2 alla classe B, 3 alla classe C, ecc.).

Dimostriamo come funziona questa funzione. Creiamo un nuovo report esterno "Classificazione delle merci" in base alla richiesta:

SELEZIONARE
Consumo di merci,
Consumo della merceProdotti.Quantità
A PARTIRE DAL
Documento.SpesaProdotto.Prodotti COME ConsumoMerciMerci

Definiamo un nuovo campo calcolato Classe:

Clicca sull'immagine per ingrandirla.

Configuriamo le risorse come segue:

Clicca sull'immagine per ingrandirla.

In modalità personalizzata, il rapporto si presenta così:

In conclusione, notiamo che di edizione in edizione nella piattaforma 1C 8.3, il meccanismo ACS viene costantemente migliorato e perfezionato e non è possibile portare completamente questi cambiamenti nell'ambito del nostro articolo "principiante". E sembra superfluo, perché, lavorando sulla versione attuale della piattaforma, puoi sempre utilizzare vari sistemi di aiuto per aiutare nell'analisi di uno o l'altro aspetto del funzionamento di questo meccanismo.

Inoltre, non dimenticare il nostro corso separato Sviluppo professionale di report in 1C 8.3 sul sistema di composizione dei dati, che, nei minimi dettagli, analizza tutte le sottigliezze e le insidie ​​quando si lavora con questo meccanismo. Guarda tu stesso la demo e.

Quindi riassumiamo i risultati intermedi. Finora abbiamo anche preso conoscenza delle nuove funzionalità dell'interfaccia Taxi e dei moduli gestiti, nonché di alcune funzionalità precedentemente non disponibili della piattaforma stessa. Ora è il momento di vedere quali comode funzionalità sono diventate disponibili per lo sviluppatore nel configuratore.

Concetto di programmazione asincrona

Il concetto di programmazione asincrona è che il risultato dell'esecuzione della funzione non è disponibile immediatamente, ma dopo un po' di tempo sotto forma di una chiamata asincrona (che interrompe il normale ordine di esecuzione).

Quelli. L'idea principale della programmazione asincrona è eseguire chiamate di metodo separate e continuare a svolgere altre attività in parallelo senza attendere la fine delle chiamate.

Alcuni metodi, la cui probabilità di eccezioni è ridotta al minimo, non richiedono un approccio asincrono, ma altri lo richiedono all'inizio dello sviluppo.

Come si può notare dai grafici, il coefficiente di azioni utili interattive dell'utente nel modello di programmazione sincrona è assente, poiché il sistema blocca l'interfaccia utente, mentre nel modello asincrono l'utente continua a lavorare attivamente nel sistema.

Quando è in esecuzione in modo sincrono, l'applicazione dispone di un solo thread. Con il modello di programmazione asincrona, puoi avviare molti thread simultanei e reagire alle nuove azioni dell'utente durante l'esecuzione. Al termine dell'n-thread, si visualizza il risultato sullo schermo.

Attività in background in "1C: Enterprise 8"

In 1C: Enterprise 8, i lavori in background sono progettati per eseguire attività applicate in modo asincrono. Possono generare processi in background figlio, ad esempio, per parallelizzare calcoli complessi su diversi server di lavoro del cluster in modo client-server.

È possibile limitare l'esecuzione di lavori in background che hanno le stesse modalità, secondo uno specifico criterio applicativo. La creazione programmatica e la gestione dei lavori in background è possibile da qualsiasi connessione utente all'infobase di sistema. Il processo in background viene eseguito per conto dell'utente che lo ha creato.

Il meccanismo delle attività funziona sia in modalità client-server che in modalità file, ma le possibilità di amministrazione ed esecuzione delle attività in entrambe le opzioni sono leggermente diverse.

Opzione client-server

Nella versione client-server, la pianificazione delle attività è gestita dall'utilità di pianificazione, che si trova fisicamente nel gestore cluster.

Lo scheduler controlla periodicamente se ci sono richieste per lavori in background. Se ci sono attività da eseguire, lo scheduler identifica i processi di lavoro del cluster meno caricati e assegna in sequenza a ciascuno di essi la propria attività da eseguire. Pertanto, lo stesso flusso di lavoro può potenzialmente eseguire più lavori in parallelo. Dopo che l'attività è stata ricevuta dal flusso di lavoro, il flusso di lavoro stabilisce una connessione all'infobase ed esegue l'attività all'interno di questa connessione. Al termine del lavoro, il flusso di lavoro notifica all'utilità di pianificazione l'esito positivo o negativo del lavoro.

Opzione file

A partire dalla versione 8.3.3.641 della piattaforma, gli sviluppatori hanno notevolmente semplificato il lavoro con i lavori in background nella versione file.

In precedenza, l'esecuzione automatica delle attività richiedeva l'avvio di una sessione 1C aggiuntiva separata: Enterprise utilizzata come pianificatore di attività. E in questa sessione, è stato necessario eseguire periodicamente il metodo del linguaggio incorporato ExecuteJobProcessing(). Questo approccio era piuttosto complicato, scomodo e limitava notevolmente l'uso di processi pianificati e in background nella modalità operativa file.

Ora tutto è diventato molto più semplice. Se si avvia un thin o fat client o se il server Web dispone di connessioni client, in ciascuna di queste applicazioni viene avviato automaticamente un altro thread con una connessione al database. Questi thread sono responsabili dell'esecuzione di processi in background e pianificati.

Ciascuna delle applicazioni elencate ha i propri processi in background. Se l'applicazione ha avviato diversi processi in background, questi vengono eseguiti in sequenza, nell'ordine in cui vengono ricevuti.

Un evidente svantaggio dei lavori in background 1C: poiché vengono eseguiti lato server, non c'è possibilità di lavoro interattivo con l'utente (ad esempio, non è possibile visualizzare un messaggio o qualsiasi altra informazione; tutti questi dati devono essere archiviati all'interno dell'infobase e ulteriormente elaborati in qualche modo) .

Va notato che i lavori in background sono oggetti puramente programmatici e non possono essere salvati nel database. Cioè, possiamo solo creare un'istanza della classe, inizializzare le sue proprietà e avviarla per l'esecuzione.

Un esempio di esecuzione di codice asincrono in 1C: Enterprise 8

“Scrivere programmi in cui il risultato di una chiamata di funzione arriva in una data sconosciuta è molto più difficile del solito. Chiamate nidificate, gestione degli errori, controllo su ciò che sta accadendo: tutto diventa più complicato "- solo coloro che non sanno come utilizzare correttamente le capacità della piattaforma lo diranno, ma non noi!

Dimostriamo tutta la semplicità e la grazia dell'esecuzione asincrona del codice in 1C: Enterprise 8!

Passo 1. Creiamo una nuova sicurezza delle informazioni per lo sviluppo della configurazione

Passo 2. Nella configurazione aggiungere un modulo comune "AsynchronousHandlers"

Perché abbiamo aggiunto un modulo comune? Qui tutto è semplice: per eseguire operazioni asincrone in "1C: Enterprise 8" vengono utilizzate attività in background, che hanno il proprio gestore - "BackgroundJobs Manager". Questo oggetto dispone del metodo Run, utilizzato per avviare il processo in background.

Passiamo all'helper per la sintassi.

Quindi, abbiamo bisogno di un modulo comune.

Passaggio 3. Nel modulo generale "AysynchronousProcessors" aggiungeremo la procedura di esportazione OurLongedOperation()

Procedura OurLongedOperation (Duration) Export // Simulazione del funzionamento continuo (Duration sec.). OperationStartDate = CurrentDate (); Mentre CurrentDate () - Data di OperationStart< Длительность Цикл КонецЦикла; КонецПроцедуры

Passaggio 4. Aggiungere l'elaborazione "AsynchronousProgrammingConcept" alla configurazione (è possibile creare elaborazioni esterne)

Aggiungi un oggetto di scena al modulo:

Durata (numero)

e due squadre

Eseguire un'operazione lunga;

ExecuteLongOperationAsynchronously.

Passaggio 5. Secondo l'helper sintassi, compila il modulo modulo

& Sul client Procedura ExecuteLongOperation (Command) ExecuteLongOperationAtServer (); EndProcedure e procedura AtServer ExecuteLongServerOperation () AsynchronousHandlers.OurLongOperation (Duration); EndProcedure e procedura OnClient ExecuteLongOperationAsynchronously (Command) ExecuteLongOperationAsynchronouslyAtServer (); EndProcedure e procedura AtServer ExecuteLongOperationAsynchronouslyOnServer () Parametri = New Array; Opzioni.Aggiungi (Durata); BackgroundJobs.Run ("AsynchronousHandlers.OurLongOperation", Parameters, New UniqueIdentifier, "Un esempio di concetto di programmazione asincrona"); Fine della procedura

Passaggio 6. Lanciamo e controlliamo!

Risultato:

Se facciamo clic sul pulsante "Esegui un'operazione lunga", l'interfaccia utente viene bloccata per "Durata" secondi;

Se facciamo clic sul pulsante "Esegui un'operazione lunga in modo asincrono", l'interfaccia utente non viene bloccata, ma il codice del programma viene eseguito in parallelo.

Possiamo verificare che il codice del programma venga eseguito in modo asincrono guardando il log.

Possiamo eseguire il debug del codice del programma che viene eseguito in "background" se impostiamo la proprietà corrispondente nei parametri di debug.

Un esempio di esecuzione di codice asincrono in 1C: Enterprise 8 utilizzando BSP

Un esempio dell'implementazione di un concetto di programmazione asincrona in "1C: Enterprise 8" nel BSP sarà considerato sull'esempio di elaborazione "Affari correnti".

La logica è la seguente: durante l'avvio del programma, viene inizializzata l'area di lavoro della pagina iniziale, dove è possibile visualizzare il modulo di elaborazione "Affari correnti". Questo modulo è riempito con gli affari correnti dell'utente e richiede tempo per essere completato. Se gli sviluppatori non avessero l'opportunità di eseguire il codice in modo asincrono, l'interfaccia utente sarebbe bloccata per l'intero tempo di compilazione del modulo di elaborazione!

Analizziamo il codice del programma del form.

L'evento del modulo "OnCreateAtServer" chiama la procedura "RunBackgroundJob" - questo è ciò di cui abbiamo bisogno.

Senza farci distrarre dalle sfumature, analizziamo questa procedura

E qui possiamo vedere che vengono utilizzati il ​​gestore dei lavori in background e il suo metodo Run. Tieni presente che gli sviluppatori mantengono un ID univoco per il lavoro in background.

Per questo, gli sviluppatori usano il metodo ConnectWaitingHandler (<ИмяПроцедуры>, <Интервал>, <Однократно>).



In una procedura collegabile Connectable_VerifyJobProcessing () gli sviluppatori chiamano una funzione Lavoro completato (ID lavoro)


Questa funzione controlla l'esecuzione del lavoro in background per identificatore.

Va notato che BSP ha sviluppato moduli comuni per supportare il funzionamento delle operazioni del server a lungo termine.

Pertanto, il concetto di programmazione asincrona in 1C: Enterprise 8 aumenta leggermente la complessità della risoluzione dei problemi per lo sviluppatore, ma migliora notevolmente la funzionalità del programma dal punto di vista dell'utente.

Probabilmente non una singola configurazione seria su 1C 8.3 o 8.2 può fare a meno dell'uso di processi pianificati e in background. Sono molto convenienti, poiché verranno eseguiti secondo una pianificazione chiaramente definita senza l'intervento dell'utente o del programmatore.

Ad esempio, è necessario scambiare dati con un altro programma una volta al giorno. Utilizzando attività pianificate e in background, 1C sarà in grado di eseguire queste azioni da solo, ad esempio durante le ore non lavorative. Questo metodo non influenzerà in alcun modo l'esperienza dell'utente e aiuterà a risparmiare tempo.

Per prima cosa, cerchiamo di capire cosa significano e qual è la loro differenza:

  • Attività di routine consente di eseguire azioni specifiche in base a una pianificazione preconfigurata.
  • Lavoro in backgroundÈ un oggetto che contiene le azioni da eseguire.

Supponiamo che la nostra azienda venda qualcosa e abbia un proprio sito web con i prezzi. Vogliamo scaricarli una volta al giorno per mantenere la loro rilevanza.

Apri la configurazione e aggiungi un lavoro pianificato.

Impostazione delle proprietà

Consideriamo i parametri più importanti che devono essere compilati nelle sue proprietà.

  • In campo" Nome del metodo» Viene selezionata la procedura di un determinato modulo generale, che verrà eseguita direttamente. Indicherà tutte le azioni per caricare i prezzi sul nostro sito. Si noti che l'esecuzione avverrà sul server. Questo è logico, perché le operazioni di routine vengono eseguite senza l'intervento dell'utente.
  • Il lavoro pianificato può essere disabilitato o abilitato secondo necessità. Non devi cambiare il suo programma ogni volta. Per fare ciò, imposta o deseleziona il " utilizzo».
  • Un'altra cosa importante è l'impostazione se questa attività pianificata sarà predeterminato, o no. I lavori pianificati predefiniti vengono avviati automaticamente. Se questo segno non è impostato, sarà necessario eseguirli a livello di codice o utilizzare l'elaborazione "Task Console" da ITS.
  • Puoi anche specificare il numero di ripetizioni e l'intervallo tra di loro in caso di cessazione anormale. L'interruzione anomala si riferisce a quelle situazioni in cui le attività non hanno funzionato a causa di un errore.

Impostazione programma

Il passaggio finale consiste nell'impostare la pianificazione per il nostro caricamento sul sito utilizzando il collegamento ipertestuale corrispondente nella tavolozza delle proprietà.

Vedrai una tipica impostazione di pianificazione in 1C 8.3. Non c'è niente di difficile qui. Nell'ambito di questo esempio, abbiamo configurato il lancio del nostro scarico dei prezzi sul sito tutti i giorni dalle cinque alle sette del mattino. Nel caso in cui l'attività pianificata non abbia il tempo di allenarsi prima delle 7:00, verrà completata il giorno successivo.

Blocco dei lavori pianificati

Esegui l'utilità standard "Amministrazione dei server 1C Enterprise" e apri le proprietà dell'infobase in cui hai creato l'attività pianificata (per le versioni client-server di 1C).

Nella finestra che si apre (dopo aver inserito login e password per l'accesso all'IB), verificare che il flag sulla voce “Blocco attività pianificate abilitato” non sia impostato. Se ti trovi di fronte a una situazione in cui l'attività non funziona, controlla prima questa impostazione.

Allo stesso modo, puoi disabilitare completamente le attività pianificate in 1C 8.3. Per disabilitare processi in background specifici, puoi utilizzare l'elaborazione "Background Job Console" integrata nelle ultime versioni.

Attività in background e pianificate in modalità file

In questa modalità, l'impostazione e l'esecuzione di queste attività è molto più difficile da organizzare. Molto spesso viene creato un account aggiuntivo, la cui sessione sarà sempre aperta.

In questo caso, i processi pianificati vengono attivati ​​utilizzando il metodo "RunJobProcessing()".

Puoi anche usare la seguente costruzione:

Come nome della procedura, è necessario specificare il nome della procedura client da eseguire. L'intervallo mostra quanti secondi impiegherà l'esecuzione. Il parametro "Una volta" è facoltativo. Riflette se questa procedura verrà eseguita una o più volte.

Monitoraggio degli errori nei lavori in background

È possibile visualizzare lo stato di avanzamento delle attività in background, nonché la presenza di possibili errori nel registro. Nel filtro, imposta il filtro sull'applicazione "Lavoro in background" e, se necessario, seleziona l'importanza di interesse, ad esempio solo "Errori".

Il registro mostrerà tutte le voci che corrispondono alla tua selezione, con un commento che indica il motivo dell'errore.

La domanda che abbiamo posto nel titolo dell'articolo è rilevante per molti amministratori di sistema che lavorano con questo prodotto. Per quanto possibile, cerchiamo di parlare dei parametri che influenzano le prestazioni di 1C e sfatiamo i miti popolari. Oggi, utilizzando un esempio recente, vogliamo parlarvi di un altro aspetto che può incidere seriamente sulla produttività: i lavori programmati.

Cominciamo con un caso reale. Non molto tempo fa, uno dei nostri clienti ci ha contattato con un reclamo sui "freni" 1C da parte di uno dei suoi dipendenti. I sintomi sono stati espressi nel fatto che dopo un certo periodo di tempo la configurazione di Trade Management 10 ha iniziato a rallentare fortemente, o, più semplicemente, si è bloccata per un po'.

Con un'analisi più dettagliata della situazione, si è scoperto che questo accade solo per un dipendente, e in qualsiasi luogo di lavoro, sta accadendo da molto tempo, ma se prima i "freni" duravano circa un secondo, ora, dopo il aggiornamento, possono durare fino a 15-20 secondi, il che rende il lavoro estremamente scomodo.

In linea di massima, i dati iniziali sono già sufficienti per trarre le prime conclusioni. Diamo loro ancora una volta:

  • I "freni" si verificano costantemente, a intervalli regolari
  • Un solo utente "rallenta"
  • "Rallenta" in qualsiasi luogo di lavoro

Per confermare le nostre ipotesi, diamo un'occhiata a Impostazioni dei parametri di contabilità:

In effetti, l'utente "problematico" è elencato come utente per eseguire attività di routine. Come si è scoperto, una volta, un'attività di scambio automatico RIB era in esecuzione per conto di questo utente. Resta da vedere quale sia stata esattamente la causa dell'"inibizione" episodica. Anche questo è facile da fare:

Ed ecco "l'eroe del giorno": il compito di aggiornare l'indice di ricerca full-text, che è stato lanciato una volta ogni 2,5 minuti. In questo caso il problema è stato completamente risolto disabilitando l'esecuzione dei lavori pianificati sotto questo utente, tuttavia, questo non è sempre possibile o consigliabile, quindi, di seguito considereremo come è possibile gestire i lavori pianificati e come assicurarsi che lo facciano non influisca negativamente sulle prestazioni.

Applicazione regolare

Nelle configurazioni basate su un'applicazione normale, non esiste un unico toolkit per la gestione dei lavori pianificati. Ciò è in gran parte dovuto al fatto che al momento del loro sviluppo iniziale, il concetto stesso di attività pianificate era piuttosto sviluppato.

Molti lavori pianificati vengono gestiti tramite la configurazione dei sottosistemi associati. Ad esempio, le impostazioni per le attività pianificate relative allo scambio di dati dovrebbero essere trovate nelle impostazioni di scambio relative all'EGAIS nelle impostazioni per il commercio di alcolici, ecc.

A prima vista, tutto è abbastanza logico, ma l'assenza di un unico strumento rende difficile controllare le attività pianificate configurate e le impostazioni ottimali per esse. Va bene se ci sono una o due attività e se ce ne sono più o, come nel nostro caso, c'è il sospetto di una qualsiasi delle attività pianificate, ma non hai idea di chi e cosa sia impostato in questo database.

In questo caso, dovresti utilizzare un'elaborazione esterna Console di lavoro (JobsConsole), che è incluso nel set di trattamenti standard sul disco ITS. L'elaborazione fornisce un'unica interfaccia per tutte le attività e consente di eseguire la loro configurazione centralizzata, nonché di monitorare le attività attualmente in esecuzione.

Questo elenco dovrebbe essere studiato attentamente, tutte le attività non necessarie dovrebbero essere disabilitate e quelle necessarie dovrebbero essere adattate alle esigenze urgenti e al buon senso. Ad esempio, nel nostro caso, non è necessario elaborare le risposte EGAIS una volta ogni 30 secondi (questa impostazione è stata eseguita per il test) e in modalità operativa sarà sufficiente farlo, ad esempio, una volta ogni mezz'ora.

Applicazione gestita

Nelle configurazioni basate su un'applicazione gestita, alle attività pianificate viene assegnato un ruolo più significativo, possono essere utilizzate per eseguire varie attività per la manutenzione dell'infobase e tenerla aggiornata, ma allo stesso tempo sono attività pianificate che più spesso causano "Freni".

Per gestire le attività di routine, c'è una voce hotel nel menu Amministrazione - Supporto e servizio.

Si può notare subito che le attività sono aumentate in modo significativo (ad esempio, abbiamo preso la stessa configurazione - Vendita al dettaglio) e la loro impostazione competente può migliorare significativamente le prestazioni dell'infobase. Le impostazioni predefinite sono effettuate da 1C in base alle esigenze di un'azienda sferica media nel vuoto e non sono nemmeno vicine all'ottimale.

Prima di tutto, disattiviamo ciò che è chiaramente non necessario, con il quale non stai lavorando. Quindi ottimizziamo la pianificazione delle funzioni utilizzate raramente, ad esempio, l'aggiornamento del classificatore delle banche nel Retail, così come il controllo delle controparti, può essere effettuato una volta alla settimana al di fuori dell'orario di lavoro o alla fine (inizio) di una giornata lavorativa.

Particolare attenzione dovrebbe essere prestata a tutto ciò che riguarda l'indice di ricerca. La ricerca full-text è certamente una cosa comoda, ma lavorare con il suo indice è un'attività che richiede molte risorse. Pertanto, non dovresti andare agli estremi e abbandonarlo, ma dovresti rivedere e regolare seriamente i suoi parametri.

Iniziamo con estrarre il testo, questa operazione consente di cercare in base al contenuto dei file allegati, quindi se non li usi, non li cerchi o hai solo immagini lì, allora questa operazione può essere disabilitata, in ogni caso, eseguendola una volta ogni 85 secondi è un evidente eccesso.

Aggiornamento dell'indice RPM- una delle operazioni più dispendiose in termini di risorse, per impostazione predefinita viene eseguita una volta al minuto.

Ora pensiamo a quante volte le informazioni che cerchi più spesso vengono aggiunte o aggiornate nel database? Ovviamente non ogni minuto, quindi basterà aggiornare l'indice molto meno frequentemente: una volta ogni ora, una volta al giorno, o anche una volta alla settimana.

Lo stesso vale per la fusione dell'indice PPD, se aggiorni l'indice una volta al giorno, devi configurare l'unione in modo che venga eseguita una volta alla settimana, scegliendo l'orario di minima interferenza come inizio dell'attività.

Queste semplici operazioni ti permetteranno, senza troppi danni alla funzionalità della configurazione, di elevare la comodità di lavorare con essa a un nuovo livello rifiutando l'esecuzione frequente di operazioni piuttosto dispendiose in termini di risorse. Basta non andare agli estremi, giudicare correttamente quanto hai bisogno di queste o quelle opportunità e con quale frequenza dovresti completare le attività ad esse associate.

  • tag:

Si prega di abilitare JavaScript per visualizzare il

Principali articoli correlati