Casa / Skype / Come creare un gestore di eventi 1s. Assegnazione di gestori di eventi utilizzando le sottoscrizioni di eventi. Aggiunta automatica di punti di interruzione

Come creare un gestore di eventi 1s. Assegnazione di gestori di eventi utilizzando le sottoscrizioni di eventi. Aggiunta automatica di punti di interruzione

Nel corso della risoluzione di vari compiti degli utenti, a volte diventa necessario sottoporre i movimenti di documenti già formati (vale a dire alcuni insiemi di registri) a una sorta di adeguamento.

Per questi scopi è molto adatto l'oggetto “Abbonamento Evento”, che permette di eseguire alcune azioni quando si verifica un determinato evento per un largo numero oggetti (ad esempio, quando si registrano documenti di pagamento o quando si imposta un nuovo numero di directory relative alla contabilità fiscale).

Inoltre, iscriversi a un evento è conveniente perché te lo consente varie attività senza modificare i meccanismi tipici descritti nei diversi moduli.

Ad esempio, è sorto un compito: è necessario registrare determinati dati (informazioni sulle attività dell'azienda) nei documenti di pagamento dopo la formazione dei principali movimenti del documento (formato nell'evento "Elaborazione"). L'attività sarà implementata sulla configurazione "Manufacturing Enterprise Management" ed. 1.3.

Vediamo la soluzione in modo più dettagliato:

Creiamo un nuovo abbonamento all'evento "Record Direction to Payment". Un abbonamento ha una serie di proprietà che ne determineranno il comportamento:

Fonteè un oggetto (ad esempio un documento o un elenco di documenti) per il quale verrà chiamata l'azione. Per il nostro caso, scegliamo Ordine di pagamento in uscita e Ordine di pagamento in entrata

Sviluppi- l'azione stessa, dopo la quale il nostro codice verrà eseguito. A seconda delle condizioni del problema, scegliamo in lavorazione

Gestore- l'indicazione della procedura in cui avverrà il trattamento. Per questi scopi, scegliamo il modulo generale Scopo generale.

Dopo gli obiettivi di cui sopra, viene creata una procedura in cui è necessario inserire un codice per inserire i dati sulla direzione (supponendo che tali informazioni siano già contenute negli ordini di pagamento).

Considera i suoi parametri:

Fonte- questo oggetto del tipo DirectoryObject o DocumentObject per il quale avviene l'azione.

Rifiuto- un parametro che consente di annullare la pubblicazione di un documento in determinate condizioni.

Modalità di attesa- opzioni di conduzione (operativa o non operativa), che consentono di costruire algoritmi di elaborazione in diversi modi.

Fermiamoci al parametro Fonte. Per il nostro compito, il tipo di questo parametro sarà - DocumentOggetto. Per questo tipo è disponibile una raccolta movimenti, che contiene tutti i set di record di registro per i quali questo documentoè un registrar.

Questa raccolta contiene una serie di record InsediamentiCon contropartiSetRecords che ci interessa. Supponiamo che la dimensione Direzione sia creata nel registro, che dobbiamo compilare dal documento.

Scriviamo il seguente codice:

Insiemi = Sorgente. movimenti; Calcoli = Insiemi. Accordi con appaltatori; Per ogni pagina dalla pagina del ciclo di calcoli. Direzione = Sorgente. Direzione; Finisci se ;

Come possiamo vedere, l'implementazione è abbastanza semplice, dopo aver elaborato l'azione per scrivere il set, non è necessario intraprendere un'azione aggiuntiva: la sottoscrizione all'evento viene eseguita come parte della transazione dell'evento ProcessingPerforming, dopo il suo completamento il set verrà scritto automaticamente.

I vantaggi di questo approccio: elaborazione dei dati al di fuori degli algoritmi standard, riduzione della quantità di lavoro per trovare e trasferire le modifiche durante gli aggiornamenti, maggiore visibilità: tutto il codice in un'unica procedura.

Svantaggio di questo approccio: un aumento del tempo per la conduzione di documenti e la registrazione di elementi di directory.

Sperare, questa informazione sarà utile sia per i programmatori alle prime armi che per i loro colleghi più esperti come estensione dei loro orizzonti.

Abbiamo fatto clic su un pulsante, una determinata azione inizia immediatamente a essere eseguita - il modulo viene chiuso o aperto, il documento viene salvato o letto - si verifica l'evento corrispondente. In ogni caso, il programmatore ha la possibilità di assegnare una funzione speciale, che è scritta nel linguaggio 1C integrato e sarà in grado di eseguire le azioni specificate per essa quando si verifica l'evento.

Molto spesso è necessario assegnare un gestore a un intero documento oa più documenti separati contemporaneamente. Ad esempio, ciascuno dei documenti contiene l'attributo "Utente". Oppure abbiamo appena aggiunto un oggetto di scena così comune. Se questo requisito è soddisfatto, possiamo vedere solo controllando l'intero processo da soli. Ma come possiamo farlo?

Abbonamenti agli eventi in 1C

Una sottoscrizione di eventi in 1C è un oggetto che si trova nella corrispondente configurazione delle sottoscrizioni Generale/Evento. Questa sottoscrizione consente di assegnare un gestore per tali casi quando si verificano determinati eventi per più oggetti contemporaneamente.

Imposta il nome e aggiungi un nuovo abbonamento all'evento 1C

È necessario selezionare più o uno specifico documento nelle proprietà della sottoscrizione, la directory su cui mettiamo il gestore. Di conseguenza, è necessario selezionare uno degli eventi standard che possono verificarsi con l'oggetto selezionato nelle proprietà della sottoscrizione.

Dicendo "documenti e libri di riferimento" semplifichiamo molto le cose, perché in realtà puoi usare molti oggetti diversi. Uno svantaggio è che non puoi iscriverti per formare eventi.

Il numero di eventi selezionabili dipende dall'oggetto stesso. Devi stare molto attento, perché se selezioni molti oggetti, l'elenco mostrerà solo quegli eventi che ciascuno degli oggetti selezionati può avere. (Eventi comuni a tutti gli oggetti selezionati).


Dopo aver completato tutti questi passaggi, resta solo da creare una funzione di gestione. Per fare ciò, è necessario disporre di un modulo comune nella configurazione, in cui è presente un segno di spunta accanto alla voce "Nord". Quando si fa clic sul pulsante della lente d'ingrandimento, verrà creata una funzione di gestione.

Siamo stati in grado di iscriverci per tutti i documenti all'evento "Prima di scrivere". Ora la funzione verrà eseguita durante la scrittura di qualsiasi documento in cui è registrato l'assegno. Se il controllo è negativo, per rifiutare di scrivere il documento, è necessario impostare il parametro della funzione
Rifiuto = Vero.

Quando l'utente fa clic su un determinato pulsante, il modulo si apre o si chiude, viene scritto un documento e si verifica un evento.

Prima di scrivere ogni documento, vogliamo controllare che questo attributo sia compilato.

Come farlo?

Abbonamenti agli eventi 1C

Un abbonamento agli eventi 1C si trova nel ramo di configurazione Generale / Abbonamenti agli eventi 1C.

La sottoscrizione a un evento 1C consente di assegnare un gestore quando si verifica un evento per più oggetti (directory, documenti).

Aggiungiamo un nuovo abbonamento all'evento 1C, impostiamo il nome.

Nella proprietà di sottoscrizione dell'evento 1C Sorgente - è necessario selezionare uno o più documenti, directory - oggetti su cui mettiamo il gestore.

Nella proprietà di sottoscrizione dell'evento 1C Evento: è necessario selezionare una delle opzioni per gli eventi standard che possono verificarsi con i documenti e le directory selezionati.

Semplifichiamo dicendo "documenti e directory" - infatti, possono essere utilizzati molti oggetti 1C. Sfortunatamente, non puoi iscriverti agli eventi del modulo 1C, ad esempio quando si apre un modulo, cosa di cui molti programmatori si rammaricano.

L'insieme dei possibili eventi dipende dall'oggetto. Fai attenzione, perché se selezioni più (molti) oggetti, l'elenco di eventi conterrà solo quegli eventi che ciascuno degli oggetti selezionati può avere (ovvero, eventi comuni a tutti gli oggetti selezionati).

Dopodiché, resta da creare una funzione di gestione. Per fare ciò, la configurazione deve avere la casella di controllo Server selezionata nelle proprietà. Quando fai clic sul pulsante della lente d'ingrandimento, verrà creata una funzione: un gestore.

Tutto! Ci siamo appena iscritti all'evento 1C PreWrite per tutti i documenti. Ora, durante la scrittura di qualsiasi documento, verrà eseguita la nostra funzione, in cui viene scritto il controllo.

Per rifiutarsi di scrivere il documento se la verifica è negativa, è necessario impostare il parametro della funzione

Quando si lavora con base informativa 1C, diventa spesso necessario associare un nuovo algoritmo a un evento associato a una modifica in un oggetto. Nella versione 7 del programma, per eseguire il gestore, era necessario riscrivere il codice sorgente del programma, cosa che ha comportato problemi durante l'aggiornamento della configurazione.

Dopo aver analizzato il feedback degli utenti, gli sviluppatori del G8 hanno implementato un nuovo oggetto chiamato "Event Subscription". In questo articolo cercheremo di svelare:

  • Impostazioni di abbonamento;
  • Creazione;
  • Caratteristiche di funzionamento.

Crea un nuovo abbonamento

Come qualsiasi altro oggetto di metadati, dal configuratore viene aggiunta una sottoscrizione a un evento in 1C.

Questi elementi si trovano nel ramo dell'albero "Generale" (Fig. 1).

Per aggiungere un nuovo gestore:


Fig.3

Per evitare problemi con gli aggiornamenti, è meglio che i tuoi sviluppi abbiano un proprio modulo comune, che conterrà solo le tue procedure e funzioni.

Caratteristiche del funzionamento degli abbonamenti

Una delle principali domande che sorgono per gli utenti che iniziano a lavorare con l'oggetto Event Subscription è la questione dell'ordine in cui vengono chiamate le procedure. Spesso, è qui che si trovano gli errori dovuti al fatto che la procedura non funziona o funziona ogni volta.

Nell'esempio della procedura OnRecord() per qualsiasi documento, è possibile visualizzare l'ordine in cui vengono chiamati i gestori.

Quindi, se c'è questa procedura nel modulo oggetto documento, e parallelamente ad essa c'è un'elaborazione chiamata dalla sottoscrizione e l'elaborazione dello stesso evento, il modulo documento verrà elaborato prima di tutto. Se, durante l'esecuzione di OnWrite() nel modulo del documento, il parametro Rifiutato per qualche motivo è impostato su True, la sottoscrizione è garantita per non funzionare.

Nel caso in cui siano presenti più oggetti di sottoscrizione uguali per un'origine e un evento, è molto difficile tenere traccia dell'ordine di esecuzione. E, se durante l'esecuzione di almeno un gestore viene sollevata un'eccezione, alcune delle procedure rimarranno non eseguite.

Pertanto, la sequenza di elaborazione può essere specificata dal seguente schema:

  1. Gli eventi del modulo oggetto vengono elaborati;
  2. Vengono elaborati gli abbonamenti associati direttamente al tipo di dati corrente;
  3. Il codice associato a un tipo generico viene elaborato.

È molto importante ricordare che in nessun caso il codice che modifica i dati dell'oggetto sorgente deve essere inserito in procedure eseguite in scrittura, questo può portare a loop non necessari. È preferibile utilizzare codice simile nelle procedure BeforeWrite.

Modulo aperto gestore di eventi

Crescente popolarità moduli gestiti, utilizzato nella versione 8 del programma, nonché i problemi legati all'aggiornamento di questi oggetti durante il salvataggio delle proprie modifiche, hanno portato al fatto che, a partire dalla piattaforma 8.2.15, nel programma è apparso l'evento ProcessingFormReceive. È qui che puoi inserire il codice che cambia e sostituisce i moduli standard.

Alcune caratteristiche di questo gestore:

  • L'evento non funzionerà se la configurazione viene aperta tipo modulo esplicitato rigorosamente;
  • L'evento può essere implementato solo per i moduli gestiti;
  • Modulo generale Il , contenente questo gestore, non solo deve avere l'attributo "Server", ma deve contenere anche una casella di spunta nel campo "Chiamata server".

È importante considerare che questa sottoscrizione è chiamata non per un oggetto specifico, ma per il suo gestore, ovvero il campo sorgente deve contenere questa parola (Fig. 4)

Fig.4

Riassumendo quanto sopra, vorrei dire che "Event Subscription" è uno strumento estremamente utile e necessario per lo sviluppatore, che consente di implementare i propri obiettivi e obiettivi senza seri interventi nella configurazione.

Questo articolo è un annuncio di nuove funzionalità.
Non è consigliabile utilizzare il contenuto di questo articolo per apprendere nuove funzionalità.
Descrizione completa nuove funzionalità saranno fornite nella documentazione per la rispettiva versione.
Lista completa cambia in nuova versioneè fornito nel file v8Update.htm.

Implementato nella versione EDT 1.7.0.567.

In 1C:Enterprise Development Tools (EDT) abbiamo implementato un prototipo di un nuovo strumento. Il titolo di lavoro di questo strumento è Editor Tutti gli abbonamenti agli eventi. Ti aiuterà ad analizzare comodamente gli abbonamenti a tutti gli eventi esistenti nella soluzione applicativa.

Abbonamenti agli eventi

La piattaforma 1C:Enterprise consente di creare sottoscrizioni a eventi di oggetti di configurazione in una soluzione applicativa. Una sottoscrizione è una procedura che verrà eseguita dopo l'esecuzione del gestore di eventi originale. La comodità degli abbonamenti sta nel fatto che una procedura può essere “abbonata” ad un evento appartenente a diversi oggetti di configurazione. Pertanto, se c'è un algoritmo che deve essere eseguito sia durante la registrazione di un'organizzazione che durante la registrazione di un dipartimento, può essere inserito in una sottoscrizione e quindi non è nemmeno necessario modificare i gestori per questo evento negli oggetti stessi .

Si scopre che l'abbonamento è un meccanismo conveniente e universale. Ma nelle soluzioni applicative di grandi dimensioni, il numero di abbonamenti a eventi può raggiungere diverse centinaia. Diventa scomodo analizzarli nell'albero di configurazione, in un elenco lineare. Ad esempio, nella soluzione applicata 1C: Gestione d'impresa (ERP) oltre 340 abbonamenti a eventi.

EDT rende un po' più semplice lavorare con gli abbonamenti mostrandoli nel pannello schema quando viene aperto il modulo di qualsiasi oggetto dell'applicazione.


Questa visualizzazione degli abbonamenti è utile per una serie di attività relative alla modifica dei moduli. Ma non è ancora adatto quando è necessario trovare e analizzare rapidamente tutti gli algoritmi che vengono eseguiti nelle sottoscrizioni quando si verifica un evento.

Tutti gli abbonamenti agli eventi

Per eliminare gli inconvenienti sopra elencati, abbiamo implementato modo universale rappresentazioni di sottoscrizioni, eventi, oggetti di configurazione e procedure che implementano algoritmi di sottoscrizione.


Di conseguenza, puoi chiamare l'editor Tutti gli abbonamenti agli eventi per l'intera configurazione, o solo per un oggetto, la differenza sarà solo nella composizione dei dati in qualche modo filtrati.


Sul lato sinistro, l'editor mostra tutti gli eventi e, in ogni evento, tutte le sue iscrizioni. Quando viene selezionato un abbonamento specifico, in alto a destra viene visualizzato l'elenco degli oggetti di configurazione a cui è "abbonato" l'abbonamento. E in basso a destra vengono mostrati il ​​modulo e la procedura in cui si trova l'algoritmo di sottoscrizione. Facendo doppio clic su una procedura, puoi aprirla nell'editor di lingua integrato.

Mentre sei nell'editor, puoi analizzare non solo le singole iscrizioni, ma anche tutte le iscrizioni relative allo stesso evento. Se selezioni un evento, l'editor mostrerà tutti i moduli e tutte le procedure sottoscritte per gestire questo evento.


Se si richiama l'editor su un oggetto di configurazione, verranno mostrati solo gli eventi e le sottoscrizioni di quell'oggetto e l'oggetto stesso sarà sempre evidenziato in rosso nell'elenco di origine. Pertanto, puoi verificare rapidamente, ad esempio, che l'abbonamento scelto funzioni per tutti gli oggetti di configurazione che ne hanno bisogno.


Chiamando l'editor con comando di contesto(sull'oggetto di configurazione) consente di ridurre immediatamente il numero di abbonamenti visualizzati nell'editor. Ad esempio, è possibile visualizzare le sottoscrizioni solo per quegli eventi che vengono elaborati nel modulo oggetti o nel modulo manager.


Inoltre, l'editor contiene un filtro universale con il quale è possibile personalizzare arbitrariamente la composizione di oggetti, eventi e procedure.


Nota che con questo filtro puoi selezionare non solo oggetti specifici che sono l'origine degli eventi, ma anche insiemi di tipi, come DirectoryObject, DocumentOggetto e altri. Tali insiemi di tipi includono tutte le directory o tutti i documenti che sono nella configurazione.

Con una ricerca per stringa, puoi trovare rapidamente solo gli abbonamenti che si applicano al motore che ti interessa.


In qualsiasi momento, puoi filtrare rapidamente i contenuti in base all'evento o alla fonte mostrata nell'editor. Ad esempio, hai trovato un abbonamento Controlla il calcolo della formula. La sua fonte è il piano dei tipi di calcolo Tiene.


Con l'aiuto del comando contestuale sul piano dei tipi di calcolo, puoi visualizzare rapidamente solo gli abbonamenti associati ai suoi eventi.


Aggiunta automatica di punti di interruzione

Un modo comune per analizzare le sottoscrizioni di eventi consiste nel visualizzare in sequenza tutte le procedure chiamate nel debugger nell'ordine in cui sono state eseguite. Per fare ciò, l'editor fornisce un comodo strumento per aggiungere automaticamente punti di interruzione ai gestori.

Prima di tutto, puoi chiamare questo strumento direttamente nell'editor.


Puoi trovare e selezionare l'oggetto che ti interessa, selezionare uno dei suoi eventi e contrassegnare, ad esempio, tutti i gestori. Dopo aver premuto OK i punti di interruzione verranno aggiunti alla prima riga eseguibile di ogni gestore selezionato e tutti questi punti di interruzione appariranno nel pannello Punti di interruzione in prospettiva Debug.


Un altro modo per aggiungere punti di interruzione è conveniente quando hai già trovato l'oggetto o l'evento che ti interessa nell'editor. In questo caso, da menù contestuale puoi chiamare il comando che fa per te.


Infine, il terzo modo che puoi utilizzare è aggiungere automaticamente i punti di interruzione già durante il processo di debug. In questo caso non è necessario aprire l'editor, perché il comando aggiungi si trova direttamente nel pannello Punti di interruzione.


Quindi l'editore Tutti gli abbonamenti agli eventiè uno strumento versatile che consente di utilizzare una varietà di scenari di analisi. Sarà utile non solo per gli sviluppatori che conoscono bene la soluzione applicata, ma anche per gli specialisti dell'implementazione o gli specialisti IT che devono gestire funzionalità non familiari.