Come configurare smartphone e PC. Portale informativo
  • Casa
  • Notizia
  • 1c come chiamare una funzione da un modulo comune. Moduli comuni

1c come chiamare una funzione da un modulo comune. Moduli comuni

L'articolo continua la serie "Primi passi nello sviluppo di 1C", discute in dettaglio le seguenti questioni:

  • Cos'è un modulo software e in quali sezioni è composto?
  • A cosa serve il modulo applicativo? Perché ce ne sono due? Quando verrà lanciato quale? Quali sono le sottigliezze del lavoro?
  • Quali eventi sono associati all'avvio del funzionamento del sistema, come e dove elaborarli?
  • A cosa serve il modulo di connessione esterno? Quando e come usarlo?
  • Quando viene utilizzato il modulo di sessione?
  • Quali sono i moduli comuni? Quali sono le sue proprietà e regole operative? Perché utilizzare la proprietà “Riutilizzo dei valori restituiti”?
  • Quando viene utilizzato il modulo modulo e quali eventi possono essere elaborati in esso?
  • A cosa serve il modulo oggetto? In quali sezioni è composto? Come posso vedere gli eventi dei moduli disponibili?
  • Quali sono le sottigliezze nel lavorare con i moduli value manager (per costanti) e i moduli recordset (per registri)?
  • Quali sono le differenze tra un modulo oggetto e un modulo manager? Quando dovresti usare quest'ultimo?

Applicabilità

L'articolo discute la piattaforma 1C:Enterprise 8.3.4.496. Il materiale è rilevante anche per le versioni attuali della piattaforma.

Moduli in "1C:Enterprise 8.3"

I moduli sono quegli oggetti che contengono il codice del programma.

Esistono numerosi tipi di moduli nella piattaforma, ognuno dei quali ha il proprio scopo e le proprie caratteristiche.

Qualsiasi riga di codice deve trovarsi in qualche modulo. Esistono moduli di uso generale e moduli oggetto. Alcuni moduli possono essere compilati sia sul Client che sul Server, altri solo sul Server.

Un modulo può essere composto da più sezioni. La sezione di descrizione delle variabili descrive le variabili locali di questo modulo, che possono successivamente essere utilizzate in qualsiasi procedura.

All'interno di ciascuna procedura è possibile accedere a una variabile del modulo. Inoltre all'interno della procedura stessa può esserci un'altra dichiarazione di variabile con lo stesso nome. Questa sarà una variabile locale di questa procedura.

Nonostante lo stesso nome, si tratta di due variabili diverse: una viene utilizzata all'interno di una procedura specifica, l'altra al di fuori di essa.

In alcuni moduli le variabili possono indicare la posizione di compilazione (disponibilità) sul Server o sul Client. Per esempio:

La sezione che descrive le variabili è seguita da una sezione di procedure e funzioni, dove sono indicati i metodi locali di questo modulo. Alcuni moduli devono specificare dove verrà compilata la procedura o la funzione.

In linea di principio la direttiva di compilazione può essere omessa. In questo caso, la direttiva di compilazione predefinita è Server. Tuttavia, per comodità di analisi del codice del programma, si consiglia di indicare esplicitamente dove verrà compilata una determinata procedura. L'ordine in cui le procedure sono descritte non ha importanza.

Alla fine del modulo, dopo aver descritto tutte le procedure e le funzioni, si trova una sezione del programma principale, che può contenere alcuni operatori e inizializzare le variabili locali del modulo form. Questa sezione viene eseguita quando si accede al modulo.

Quindi, ad esempio, quando si apre un elemento del modulo, viene eseguita per prima la parte principale del programma del modulo del modulo.

Va notato che la sezione di dichiarazione delle variabili e la sezione del programma principale non esistono per tutti i moduli (cioè queste sezioni non sono valide in alcuni moduli). Una sezione per descrivere procedure e funzioni può esistere assolutamente in qualsiasi modulo.

Modulo applicativo

Questo modulo è progettato per gestire gli eventi di avvio e chiusura dell'applicazione. Ad esempio, quando avvii l'applicazione, puoi scaricare i tassi di cambio da Internet. Quando chiudi un'applicazione, puoi confermare all'utente che intende uscire.

Inoltre nel modulo applicativo sono presenti appositi gestori che permettono di intercettare eventi esterni provenienti dalle apparecchiature.

Potrebbero essere eventi provenienti da un lettore di carte magnetiche o da un registrar fiscale. E questi eventi possono anche essere elaborati in qualche modo.

Tieni presente che nel modulo dell'applicazione viene monitorato l'avvio interattivo del sistema.

Il modulo applicativo non funzionerà se il programma 1C viene avviato, ad esempio, in modalità di connessione com. In questo caso, la finestra del programma non viene creata.

È opportuno notare che nella Piattaforma 8.3 sono presenti due diversi moduli applicativi: il modulo Applicazione Gestita e il modulo Applicazione Regolare. Gli eventi del modulo dell'applicazione gestita vengono elaborati quando vengono avviati il ​​Thin e Thick Client e il Web Client dell'applicazione gestita.

Modulo Applicazione regolare funziona quando si esegue Thick Client in modalità Applicazione regolare, che contiene la consueta interfaccia di comando nel formato Menù principale.

Se l'applicazione è in esecuzione Gestito e in modalità Applicazione regolare, allora è necessario descrivere le procedure del gestore come per il modulo Applicazione gestita e per il modulo Applicazione regolare.

Modulo Applicazione gestita può essere selezionato dal menu contestuale del nodo di configurazione root.

Questo modulo può essere aperto anche dalla tavolozza delle proprietà dell'elemento di configurazione root.

Per aprire un modulo Applicazione regolare, è necessario fare riferimento alle impostazioni di configurazione (command Opzioni nel menu Servizio).

Si aprirà il modulo Opzioni. Sul segnalibro Generaleè necessario specificare la modalità di modifica della configurazione Applicazione gestita E Applicazione regolare.

In questo caso il modulo Applicazione regolare sarà possibile aprire anche dalle proprietà del nodo root.

Elenco degli eventi per i quali è possibile elaborare Gestito E Applicazione regolareè lo stesso.

Questo modulo può contenere una sezione di dichiarazione delle variabili, una sezione di descrizione di procedure e funzioni arbitrarie e una sezione di programma principale. Ma oltre a procedure e funzioni arbitrarie, nel modulo possono essere posizionati gestori di eventi speciali.

L'elenco dei gestori disponibili può essere visualizzato richiamando l'elenco delle procedure e delle funzioni del modulo corrente quando il modulo è aperto.

La finestra Procedure e funzioni che si apre visualizza tutte le procedure e le funzioni di questo modulo, nonché gli eventi per i quali non sono ancora stati creati gestori.

Ci sono due eventi associati all'avvio del sistema (“prima” e “a”). Due eventi associati allo spegnimento del sistema (“prima” e “alle”). E anche elaborazione di eventi esterni (ad esempio, eventi di attrezzature commerciali).

Quando viene eseguito un gestore di eventi before, l'azione viene considerata non ancora avvenuta. Quando viene eseguito il gestore dell'evento "at", l'azione è già stata completata.

Evento Prima di avviare il sistema si verifica nel momento in cui viene avviato Enterprise 8.3, ma l'applicazione stessa non è ancora apparsa sullo schermo. Questo evento ha il seguente parametro: Rifiuto.

Se questo parametro assume il valore VERO, l'applicazione non si avvierà. Evento All'avvio del sistema presuppone che l'azione sia già stata completata, la finestra sia già stata creata e in questo caso possiamo, ad esempio, visualizzare qualche modulo speciale. Non è più possibile rifiutare il lancio.

Allo stesso modo, prima di spegnere il sistema, l'applicazione è ancora aperta e puoi rifiutarti di chiuderla. Quando il sistema si spegne, la finestra dell'applicazione è già chiusa. È possibile solo eseguire azioni aggiuntive, ad esempio eliminare alcuni file o inviare un'e-mail.

Nel modulo Applicazione gestita Non vengono specificate direttive per la compilazione di procedure e funzioni, in quanto il modulo è interamente compilato lato Client. Ciò significa che nelle procedure e nelle funzioni del modulo non potremo accedere direttamente, ad esempio, ai libri di consultazione.

Se dal modulo Applicazione gestitaè necessario effettuare una chiamata al server, quindi per questo sarà necessario creare uno speciale con una bandiera .

Nel modulo Applicazione regolare Non esistono restrizioni di questo tipo poiché questo modulo verrà compilato durante il caricamento del Thick Client. Quasi tutti i tipi di dati sono disponibili nel Thick Client.

Procedure, funzioni e variabili di un modulo applicativo possono essere descritte come esportazioni.

Dato che il modulo è compilato interamente sul Client, ciò significa che nelle procedure client possiamo accedere a questo metodo e a questa proprietà.

Ad esempio, puoi chiamare una procedura o una funzione di un modulo applicativo dal modulo form di un oggetto. Tuttavia, si consiglia di utilizzare i moduli comuni per descrivere algoritmi generali. Lo scopo principale del modulo applicativo è elaborare il punto iniziale e il punto finale.

Per analogia con un modulo applicativo, questo modulo è predisposto per elaborare l'evento di apertura del programma e l'evento di spegnimento.

A differenza del modulo applicativo, che viene avviato al momento del lancio interattivo dell'applicazione, il modulo di connessione esterna funziona in modalità connessione COM, cioè quando un oggetto 1C:Enterprise 8 viene creato e connesso a un database specifico.

Questo modulo contiene eventi: All'avvio del sistema E Allo spegnimento del sistema.

Il modulo di connessione esterna può essere aperto utilizzando il menu contestuale a livello dell'oggetto di configurazione root o la tavolozza delle proprietà per il nodo root.

Lo stesso processo di connessione esterna è un processo di lavoro programmatico con la base informativa e non interattivo. Pertanto al momento non è possibile utilizzare moduli di dialogo o visualizzare messaggi di avviso, poiché non esiste un'interfaccia utente.

Nel modulo di connessione esterna è possibile descrivere le variabili di esportazione e i metodi di esportazione che saranno disponibili sul lato in cui avviene la chiamata esterna a 1C:Enterprise 8.3.

Poiché non è presente alcuna interfaccia utente nell'outer join, il modulo Outer Join è compilato interamente sul server.

Modulo di sessione

Questo modulo è necessario per inizializzare i parametri di sessione. I parametri di sessione sono variabili globali veloci i cui valori sono disponibili ovunque nella configurazione.

È possibile aprire il Modulo Sessione tramite il menu contestuale o tramite la tavolozza delle proprietà del nodo radice.

Il Modulo Sessione fornisce un evento Impostazione dei parametri di sessione.

All'avvio dell'applicazione, questa procedura viene richiamata per prima. I parametri di sessione sono necessari per qualsiasi operazione dell'applicazione: sia quando avviata in modo interattivo che quando avviata in modalità di connessione esterna.

Il Modulo Sessione descrive varie azioni per inizializzare i parametri della sessione in base alle diverse condizioni.

Questo modulo, di regola, descrive diverse procedure chiamate dalla procedura Impostazione dei parametri di sessione. Pertanto, tutte queste procedure sono separate in un modulo separato.

Il modulo di sessione viene sempre eseguito in modalità privilegiata. Ciò significa che non verrà eseguito alcun controllo delle autorizzazioni quando si accede al database. Il modulo di sessione è compilato sul Server, cioè È possibile accedere a qualsiasi metodo del server (inclusa la lettura dei valori dal database).

Nel Modulo Sessione è possibile definire solo procedure e funzioni, ovvero non esiste una sezione di descrizione delle variabili e nessuna sezione del programma principale. Non è possibile definire metodi di esportazione in un modulo di sessione.

Se all'avvio del sistema è necessario eseguire alcune azioni sul Server, ad esempio creare un elemento di una directory, allora, come opzione, è possibile utilizzare il Modulo Sessione, perché viene compilato sul Server e viene sempre eseguito in modo affidabile all'avvio del sistema. Bisogna però tenere in considerazione i seguenti punti:

  • procedura Impostazione dei parametri di sessione viene eseguito non solo all'avvio del sistema, ma anche quando si accede a parametri di sessione non inizializzati. Quelli. il gestore SetSessionParameters può essere chiamato ripetutamente durante il funzionamento dell'applicazione;
  • se il numero di elementi nell'array dei parametri di sessione è zero (l'array dei parametri richiesti ha un tipo di dati Undefinito), allora questo è il momento in cui viene avviata l'applicazione;
  • poiché il Modulo Sessione funziona in modalità privilegiata e non ci sarà alcun controllo dei diritti di accesso, dovresti lavorare con molta attenzione con gli oggetti del database, poiché l'utente può accedere a dati che non dovrebbero essergli forniti;
  • All'avvio del sistema non è ancora noto con certezza se l'applicazione verrà avviata. In questo caso, è possibile che vengano eseguite azioni non necessarie nel gestore eventi SetSessionParameters.

Questi moduli rappresentano una descrizione di alcuni algoritmi generali, ad es. procedure e funzioni richiamabili da diversi luoghi.

I metodi logicamente correlati possono essere raggruppati in diversi moduli comuni. Questi moduli vengono creati all'interno del ramo Generale.

È possibile aggiungere un numero qualsiasi di moduli condivisi. Per rendere disponibili i metodi del modulo comune altrove nella configurazione, è necessario definirli con la parola chiave Export. Le procedure client dei moduli comuni saranno disponibili sul client e quelle server sul server.

Nei Moduli Generali è disponibile solo la sezione che descrive procedure e funzionalità. Quelli. nel Modulo Generale non è possibile descrivere variabili e non è possibile descrivere una sezione del programma principale.

Se è necessaria una variabile globale, è possibile utilizzare i parametri di sessione o le variabili di esportazione del modulo dell'applicazione.

Per i moduli Generali, è possibile impostare alcuni parametri che influenzeranno il comportamento di questo modulo. Se la proprietà Global è impostata per un modulo Generale, i metodi di esportazione dichiarati in questo modulo saranno accessibili direttamente dall'esterno, senza alcuna istruzione aggiuntiva.

Quelli. dato Modulo generale parteciperà alla formazione del contesto di configurazione globale.

Proprietà Globale per i moduli generali può essere utile. Tuttavia, non dovresti usarlo ovunque per tutti i moduli comuni.

Quelli , che sono contrassegnati dal segno Globale, verrà compilato all'avvio del sistema. Maggiore è il numero di moduli di questo tipo, più lento sarà l'avvio del programma.

Se la bandiera Globale Per Modulo generale non è specificato, la compilazione di questo modulo verrà eseguita al momento della prima chiamata ad esso (cioè dopo l'avvio del sistema).

Inoltre, l'uso di moduli comuni globali influisce sulla comprensione del codice. I metodi di un modulo comune non globale vengono chiamati tramite il nome Modulo generale e il nome del metodo, ad esempio:
Modulo di calcolo dei costi.DistributeIndirectCosts();

In questo caso i nomi dei Moduli Comuni dovranno riflettere il contenuto delle procedure in essi descritte. Specificare il nome del Modulo Comune quando si richiama una procedura aiuta a comprendere meglio il codice.

Per Modulo generale V Tavolozza Proprietàè possibile impostare la proprietà Privilegiato.

Il modulo privilegiato non controlla i diritti di accesso. Ciò è necessario se Modulo generaleÈ necessario eseguire l'elaborazione dei dati di massa, ottenendo i dati dal database.

Il controllo dei diritti di accesso aumenta il tempo necessario per accedere a un database e gli algoritmi di massa spesso devono funzionare il più rapidamente possibile.

Ad esempio, il libro paga è un'operazione ad alta intensità di risorse. È necessario farlo il più rapidamente possibile. Per fare ciò, gli algoritmi che calcolano i salari vengono posti in posizione privilegiata .

Allo stesso tempo, tutte le procedure che garantiscono il completamento dei documenti relativi alle buste paga ne sono escluse Moduli comuni. È in queste procedure che viene effettuato il controllo dei diritti di accesso.

In questo modo è possibile ottenere miglioramenti significativi delle prestazioni. Ciò è particolarmente vero quando si utilizza un meccanismo per il controllo dell'accesso riga per riga ai record della tabella.

Se viene privilegiato un Modulo Comune, allora le procedure di questo modulo possono essere compilate solo sul Server.

Ci sono situazioni in cui alcuni oggetti dovrebbero essere inaccessibili all'utente, ad esempio una determinata directory. Ma quando si realizza un documento, è necessario fare riferimento a questo libro di consultazione.

Quelli. È necessario espandere temporaneamente i diritti degli utenti e quindi riportarli al loro stato originale. Questo effetto può essere ottenuto utilizzando Privilegiato Moduli comuni.

Per farlo in maniera privilegiata Modulo generaleÈ necessario creare una procedura che acceda ai dati richiesti.

Questa procedura verrà richiamata dal documento corrispondente. Quelli. all'utente vengono effettivamente concessi diritti estesi nel momento in cui viene richiamata questa procedura.

Per Moduli comuniÈ possibile specificare il percorso di compilazione. I flag vengono utilizzati per determinare se il Modulo comune sarà disponibile sul Client (applicazione gestita), sul Server o in modalità Connessione Esterna.

Inoltre, se si passa dalla modalità di modifica della configurazione all'applicazione gestita e all'applicazione normale, sarà possibile un altro contesto di compilazione: Client (applicazione normale).

Pertanto, ci sono quattro opzioni per il funzionamento del programma. A seconda dell'applicazione in esecuzione, a seconda del lavoro sul Client o sul Server, alcuni Moduli Comuni saranno disponibili o non disponibili.

Oltre alla possibilità di specificare flag di compilazione, è possibile specificare direttive di compilazione per procedure e funzioni situate nel Modulo comune.

Se viene specificata una direttiva di compilazione per un metodo, sebbene il Modulo comune sia disponibile in tutti i contesti specificati, la disponibilità del metodo specifico sarà limitata dalla direttiva di compilazione.

In questo caso non è possibile accedere alla procedura in un contesto non accessibile all'intero modulo.

Se non si specifica una direttiva di compilazione per una procedura (funzione), questa verrà compilata in tutti i contesti definiti per il modulo.

Quelli. In sostanza, verranno effettuate più copie della procedura. La scelta di una particolare istanza compilata dipende da dove viene chiamata la procedura (dalla regola di chiamata più vicina). Va tenuto presente che il codice di tale procedura deve essere scritto tenendo conto della sua disponibilità in tutti i contesti definiti per il modulo.

I moduli generici accessibili simultaneamente in diversi contesti sono progettati principalmente per creare procedure accessibili in più contesti.

Quando si crea un modulo comune, è considerata buona pratica non specificare le direttive di compilazione. Quelli. La disponibilità di procedure e funzioni dovrebbe essere determinata dalle proprietà del modulo stesso.

Con questo approccio, le procedure client saranno posizionate in moduli comuni separati e le procedure server saranno posizionate in moduli comuni separati.

I moduli che hanno impostati più flag di compilazione vengono utilizzati molto raramente nella pratica. Queste sono alcune azioni comuni disponibili sia sul client che sul server. Di solito questi sono alcuni semplici calcoli.

Importante! È possibile per il Client accedere ai metodi del server di esportazione di un Modulo comune, ma solo se questo Modulo comune è compilato solo sul Server. In questo caso viene fornito un flag speciale per consentire l'accesso da parte del Client .

Per i moduli Common non globali, è possibile memorizzare nella cache i valori restituiti dalle funzioni. Quelli. Dopo la prima chiamata di una funzione, il sistema può ricordare il risultato della sua esecuzione. Se questa funzione viene richiamata nuovamente con gli stessi parametri, il sistema restituirà il valore dalla cache.

Lo scopo di questo meccanismo è accelerare la ripetizione delle chiamate. Per configurare questo comportamento è necessario Tavolozza Proprietà modulo, impostare il valore appropriato per la proprietà Riutilizzo dei valori restituiti.

Per impostazione predefinita, questa proprietà è impostata su Non utilizzare. Altri valori possibili: cache Durante la chiamata, O Per tutta la durata della sessione.

È opportuno utilizzare questa proprietà solo per quelle funzioni i cui risultati dipendono esclusivamente dai parametri di input. Questo meccanismo è disponibile solo per i moduli comuni non globali.

Se viene selezionato il valore del parametro corrispondente Per tutta la durata della chiamata, la cache funzionerà finché è in esecuzione la procedura da cui è stato chiamato il metodo Modulo Generale. Se viene selezionato il valore Per tutta la durata della sessione, si presuppone condizionatamente che la cache funzionerà mentre l'utente sta lavorando.

Tuttavia, ci sono alcune restrizioni temporali. La cache viene cancellata automaticamente 20 minuti dopo che il valore è entrato nella cache.

Modulo modulo

Questo modulo è progettato per elaborare le azioni dell'utente. Ad esempio, descrivi l'algoritmo su come reagisce un programma quando viene premuto un pulsante. Oppure, ad esempio, nel momento in cui inserisci un valore in un campo, verificane immediatamente la correttezza.

Oltre agli eventi associati ai controlli del modulo (pulsanti, campi di input), ci sono eventi associati direttamente al modulo stesso.

Ad esempio, puoi gestire l'evento di apertura del modulo ed eseguire alcune inizializzazioni iniziali. Puoi anche gestire l'evento di chiusura del modulo e verificare se l'utente ha inserito tutto correttamente.

Esistono forme controllate e forme regolari. I moduli di questi moduli differiscono principalmente per il fatto che il modulo del modulo gestito è chiaramente suddiviso in contesto. Ogni procedura (funzione) deve avere una direttiva di compilazione. Nella forma normale, tutto il codice viene utilizzato sul Client.

In un modulo con modulo gestito è possibile dichiarare procedure e funzioni, dichiarare variabili e descrivere una sezione del programma principale.

Il codice del programma principale verrà eseguito al momento dell'inizializzazione del modulo, ad es. quando l'utente inizia ad aprirlo. La figura mostra un elenco di eventi standard per un modulo gestito.

L'elenco degli eventi di un modulo gestito è visibile anche nell'elenco delle proprietà direttamente del modulo stesso. Questo elenco viene richiamato nell'editor dei moduli gestiti.

In un modulo gestito è possibile gestire l'evento di scrittura dell'elemento. Questo evento è presente solo per i moduli oggetto (directory, documenti e altri). Se il modulo non è associato a un oggetto specifico, non vi è alcun evento di scrittura.

Per un modulo di forma regolare, l'elenco degli eventi standard è leggermente più piccolo, perché In una forma gestita molti eventi vengono fatti accoppiare (uno viene eseguito sul Client e l'altro sul Server). Nella sua forma normale, tutto il codice viene eseguito sul Client.

Modulo oggetto

Questi moduli sono tipici per directory, documenti, piani per tipi di calcoli, piani dei conti e molti altri oggetti. Il modulo oggetto è progettato per gestire eventi standard. Ad esempio, un evento per l'inserimento di un elemento di directory, un evento per la scrittura di un elemento, l'eliminazione, la pubblicazione di un documento, ecc.

In linea di principio l'evento di scrittura esiste anche nel Modulo Modulo. Ma l'evento di scrittura nel modulo modulo si verifica durante il processo di registrazione interattiva, quando si lavora con un modulo specifico.

L'evento di scrittura nel modulo oggetto verrà eseguito su qualsiasi scrittura da qualsiasi forma dell'oggetto dato. Inoltre, se l'oggetto viene scritto a livello di codice, verrà attivato l'evento del modulo dell'oggetto.

Nell'evento di scrittura del Modulo Oggetto è possibile inserire tutti i controlli sulla correttezza dei dati in scrittura, poiché questa procedura verrà eseguita assolutamente al momento di qualsiasi registrazione.

Il modulo di questo oggetto può essere richiamato tramite il menu contestuale, dalla palette Proprietà oggetto e dalla finestra di modifica dell'oggetto.

La figura seguente mostra un elenco degli eventi disponibili del modulo directory.

Nel Modulo Oggetto è possibile inserire una sezione per la descrizione delle variabili, che descrive funzioni arbitrarie che potrebbero non essere associate ad un evento, nonché una sezione del programma principale.

Nella sezione principale del programma è possibile, ad esempio, inizializzare le variabili locali di un determinato modulo. Questo codice di programma verrà eseguito quando si accede a questo oggetto Modulo.

Da notare che tutte le procedure del Modulo Oggetto sono compilate sul Server. Pertanto non sono necessarie direttive di compilazione per procedure e funzioni dell'Object Module. Alcuni oggetti di configurazione non dispongono di moduli oggetto.

Ciò è dovuto alle caratteristiche degli oggetti stessi. Tali oggetti includono Costanti E Registri. Per Costante non esiste un modulo oggetto, ma esiste un modulo molto simile chiamato Modulo Gestore del valore.

IN Modulo Gestore del valore puoi gestire gli eventi di scrittura Costanti e compilando l'elaborazione di verifica.

L'intero contesto del modulo viene eseguito sul Server.

Per i registri esiste un modulo Recordset.

Questo modulo ha anche la capacità di gestire eventi di scrittura ed eseguire controlli di occupazione.

In Object Modules, Value Manager Modules (per costanti) e Recordset Modules (per registri) è possibile descrivere metodi che possono essere resi esportabili e questi metodi saranno accessibili dall'esterno.

Quelli. Oltre a utilizzare i metodi fissi di una classe di oggetto, è possibile creare metodi aggiuntivi per un oggetto nel Modulo Oggetto. Questo modulo dovrebbe descrivere la procedura corrispondente con la parola chiave Esportare.

Successivamente sarà possibile accedere a tale procedura dall'esterno. Inoltre, questo metodo verrà visualizzato nella descrizione comando contestuale. I nuovi metodi nella descrizione comando contestuale sono evidenziati in carattere blu (icona blu P() per le procedure e F() per le funzioni).

Allo stesso modo, puoi creare una nuova proprietà dichiarando una variabile con la parola chiave Esportare. A questo immobile si può accedere anche dall'esterno.

In questo modo è possibile espandere le funzionalità degli oggetti (definire nuovi metodi e nuove proprietà). Tuttavia, le proprietà sono dinamiche e non vengono salvate nel database.

Se è necessario utilizzare una proprietà per un oggetto che verrà archiviato nel database, è necessario creare un attributo dell'oggetto.

Modulo Gestore

Questo modulo esiste per molti oggetti (rubriche, documenti, registri, ecc.). Il modulo viene aperto tramite il menu contestuale dell'oggetto oppure tramite Tavolozza Proprietà o attraverso la finestra di modifica.

Nel Modulo Manager puoi sovrascrivere alcuni eventi standard Ad esempio, in ElaborazioneRicezioneSelezioneDati, quando un elemento viene selezionato dalla directory, è possibile eseguire alcuni filtri o controlli aggiuntivi.

Inoltre, puoi creare metodi aggiuntivi nel Modulo Manager e indicare che sono metodi di esportazione. In questo caso è possibile accedere a queste modalità dall'esterno.

Per eseguire questa chiamata è necessario ottenere il tipo di dati Gestore di directory.

La differenza tra i metodi di esportazione del Modulo Manager e del Modulo Oggetto è che per accedere al metodo del Modulo Oggetto, è necessario prima ottenere l'oggetto stesso (cioè ottenere in qualche modo un collegamento e poi convertire questo collegamento in un oggetto) .

Successivamente saranno disponibili le variabili e i metodi di esportazione del modulo oggetto. Per il Modulo Gestore la chiamata è più semplice, ad esempio:
Directory.Controparti.NomeMetodo

Si tratta di due ricorsi diversi. Convertire da riferimento a oggetto (metodo OttieniOggetto) è un'azione abbastanza seria per il sistema, poiché quando si riceve un oggetto vengono letti assolutamente tutti i dati di questo oggetto, il che può richiedere molto tempo.

La seconda differenza è questa Modulo oggetto chiamato nel contesto di un elemento specifico. Di conseguenza, possiamo supporre che sia applicabile per un dato elemento (nella maggior parte dei casi, questa è esattamente la logica utilizzata).

Per quanto riguarda il Modulo Manager, descrive alcune azioni comuni per un gruppo o per tutti gli elementi di una directory o di qualche documento. Ad esempio, se devi stampare un elemento di una directory, puoi utilizzare il modulo oggetto.

Ma nel Modulo Manager è possibile creare un meccanismo più universale che stamperà, tra le altre cose, un gruppo di elementi.

Inoltre, l'accesso all'oggetto Modulo risulta comunque un'azione più lunga. Pertanto, è preferibile risolvere questo problema nel modulo manager.

Questo conclude la nostra conoscenza dei moduli nella configurazione del sistema 1C:Enterprise. Se riassumiamo brevemente tutto quanto sopra, la conclusione è la seguente conclusione:

  • Un modulo software è una parte della configurazione che può contenere solo testo nel linguaggio 1C integrato
  • I moduli software sono classificati in base ai tipi discussi in questo articolo. Ciascuna vista è determinata dal suo posizionamento e dal contesto del programma disponibile.
  • La struttura del modulo è composta da diverse sezioni, disposte in una determinata sequenza. La composizione delle sezioni è determinata dal tipo di modulo.

Si noti inoltre che abbiamo deliberatamente omesso un tipo di modulo, vale a dire il modulo di comando. Non è niente di straordinario e ti invitiamo a familiarizzare con le sue funzionalità.

Finora abbiamo considerato tutto il codice del nostro programma separatamente dalla soluzione applicativa e, di regola, lo abbiamo scritto in una nostra piccola configurazione di prova. Sei consapevole che “non puoi semplicemente andare” e iniziare a modificare il codice di una configurazione standard? NO? Poi nel prossimo articolo vi spiegheremo tutto!

Moduli della piattaforma 1C:Enterprise 8.3, 8.2

Moduli comuni

Le funzioni dichiarate con il flag "export" in un modulo di questo tipo possono essere chiamate da qualsiasi punto della configurazione. La chiamata viene effettuata tramite CommonModuleName.FunctionName().

Tali moduli non hanno una sezione variabile.

L'esecuzione dei moduli comuni dipende dalle impostazioni nelle loro proprietà:

Segnala "Globale"

Se questo flag è impostato, il contesto di tale modulo diventa globale. Cioè, quando si accede alle sue funzioni di esportazione, non è necessario specificare il nome del modulo. Ma i nomi delle sue funzioni di esportazione devono essere univoci nel contesto della configurazione globale.

Bandiera del server

Le funzioni di tale modulo possono essere eseguite sul server.

Flag "Cliente (applicazione regolare)".

Le funzioni di tale modulo possono essere eseguite sul client nella normale modalità di applicazione.

Flag "Client (applicazione gestita)".

Le funzioni di tale modulo possono essere eseguite sul client in modalità applicazione gestita.

Flag "Chiamata al server".

Il flag è disponibile per i moduli con il flag "Server" impostato. Consente al client di chiamare le funzioni di esportazione di questo modulo (che verranno eseguite sul server).

Flag di join esterno

Le funzioni di esportazione di tale modulo possono essere richiamate quando ci si connette da una fonte esterna.

Segnala "Privilegiato"

In un modulo con questo flag, il controllo dei diritti sarà disabilitato. Adatto per attività produttive o amministrative.

Opzione di riutilizzo

Se abiliti questa opzione, i valori restituiti dalle funzioni di esportazione verranno memorizzati nella cache immediatamente dopo la prima chiamata. La memorizzazione nella cache è possibile per la durata della chiamata (il tempo di esecuzione di una procedura specifica) o per la durata della sessione utente.

Modulo applicativo

Progettato per gestire gli eventi di avvio e terminazione dell'applicazione. Ne esistono di due tipi: per applicazioni normali e gestite.

Non dovresti sovraccaricarlo, poiché ciò influisce sul tempo di avvio dell'applicazione.

Modulo di sessione

Un modulo speciale utilizzato per inizializzare i parametri di sessione. È necessario per non duplicare il codice nei vari moduli dell'applicazione.

Dovrebbe essere usato con cautela, poiché il modulo può essere eseguito più volte, e può essere eseguito anche senza avviare ulteriormente il database. Eseguito prima dei moduli dell'applicazione.

Cordiali saluti, (insegnante e sviluppatore).

Stampa (Ctrl+P)

Gli oggetti situati nel ramo Moduli comuni dell'albero di configurazione sono destinati a contenere i testi di funzioni e procedure che possono essere richiamate da qualsiasi altro modulo di configurazione.
ATTENZIONE! Un modulo generale può contenere solo definizioni di procedure e funzioni.
Le procedure e le funzioni di un modulo comune per le quali è specificata la parola chiave Export nelle loro intestazioni sono uno dei componenti del contesto globale. Maggiori informazioni sulle procedure di scrittura in un modulo generale possono essere trovate nelle sezioni “Formato dei testi sorgente dei moduli di programma” e “Operatori” della guida del linguaggio integrata.
Per modificare un modulo comune, nella tavolozza delle proprietà di un oggetto del tipo Moduli comuni nella finestra Configurazione, nella proprietà Modulo, fare clic sul collegamento Apri. Il testo del modulo generale verrà rilasciato per la modifica nell'editor di testo del sistema 1C:Enterprise nella modalità di modifica del testo del modulo del programma.
Il modulo comune, essendo parte della configurazione, viene salvato solo come parte della configurazione.
La proprietà Global determina se i metodi esportati di un modulo comune fanno parte del contesto globale.
Se la proprietà Global è impostata su True, i metodi esportati del modulo comune sono disponibili come metodi del contesto globale.
Se la proprietà Global è impostata su False, viene creata una proprietà nel contesto globale con un nome che corrisponde al nome del modulo comune nei metadati. Questa proprietà è di sola lettura. Il valore di questa proprietà è l'oggetto GeneralModule. I metodi esportati di questo modulo comune sono disponibili tramite questo oggetto. Pertanto, i metodi di accesso ai moduli condivisi non globali appaiono come XXXXX.YYYYY, dove XXXXX è il nome della proprietà corrispondente al contesto del modulo condiviso e YYYYY è il nome del metodo esportato del modulo condiviso.
Esempio:

Lavorare CON Retail Equipment.ConnectBarcode Scanner();

Vari contesti e moduli comuni

Utilizzando le proprietà dei moduli comuni e le istruzioni del preprocessore, è possibile organizzare l'esecuzione di vari metodi dei moduli comuni nel contesto desiderato.
Ciascuna proprietà di un modulo comune è responsabile della capacità di compilare (ed eseguire) il modulo comune in un contesto particolare.
Sono disponibili le seguenti proprietà, che sono responsabili del contesto in cui sono disponibili i metodi del modulo generale:
Cliente (applicazione regolare)– le modalità del modulo comune saranno disponibili al Thick Client in modalità applicativa normale;
● – i metodi del modulo generale saranno disponibili per il thin client, il web client e anche per il Thick Client
modalità di applicazione gestita;
● Server – i metodi del modulo comune saranno disponibili sul server;
Unione esterna– i metodi del modulo comune saranno disponibili nella connessione esterna.
Se vengono impostate più proprietà contemporaneamente, ciò significa che i metodi del modulo comune saranno disponibili in più contesti.
Se un modulo comune ha la proprietà Server e qualsiasi altra proprietà impostata, ciò significa che il modulo comune sarà disponibile contemporaneamente sul server e nel client selezionato. È necessario comprendere che in realtà si tratteranno di diverse versioni del codice compilato (in base al numero di client selezionati e al server stesso).
Inoltre, se un metodo situato in un modulo comune di questo tipo viene chiamato dal lato client, verrà utilizzata la copia client del modulo comune e, se dal server, verrà utilizzata la copia server. In questo caso, utilizzando le direttive del preprocessore (vedi qui per maggiori dettagli), puoi “proteggere” il server dal codice che non può essere eseguito su di esso.
Diamo un'occhiata a un esempio. Nel modulo comune (che può essere eseguito sul thin client e sul server) è presente un metodo che ha un comportamento leggermente diverso sul lato thin client e sul lato server. Vediamo come è possibile farlo:



#Se ThinClient allora
// Mostra avviso
Mostra avviso utente(“Sul cliente”);
#EndIf
FineProcedura
Quindi sul lato server il codice sarà simile a questo:
Procedura Metodo CommonModule() Esportare
// Vari codici importanti vanno qui
FineProcedura
E sul lato thin client il codice sarà simile a questo:
Procedura CommonModule Metodo() Esporta
// Vari codici importanti vanno qui
// Mostra avviso
ShowUserAlert("Sul client");
FineProcedura

Esistono diversi modi per trasferire il controllo dal client al server:
● richiamare il metodo del modulo comune del server;
● in un modulo di modulo o comando, chiamare un metodo preceduto da direttive di compilazione &OnServer, &OnServerSenza contesto

In questo caso, è impossibile chiamare i metodi dei moduli comuni client (che non hanno la proprietà Server impostata) e i metodi client di un modulo del modulo o di un modulo di comando dalle procedure del server. Il controllo verrà restituito al client una volta completata la chiamata al metodo del server più esterno.
L'eccezione sono i metodi del modulo form e del modulo comando, che sono preceduti da direttive di compilazione &OnClientOnServer, &OnClientOnServerSenza contesto
Dovrebbero essere menzionati anche i seguenti punti:
● Se un modulo comune è disponibile per più di un client, quando si scrive il codice del programma, è necessario considerare le restrizioni massime che possono essere imposte dai client o utilizzare le istruzioni del preprocessore per "isolare" il codice specifico per un particolare client.
● Le istruzioni del preprocessore hanno senso anche quando un modulo comune ha diversi contesti di esecuzione, ad esempio una connessione esterna e un thin client o (cosa molto più comune) alcuni client e un server. In questo caso, le istruzioni del preprocessore inquadreranno il codice interattivo che non può essere utilizzato sul server, ma può essere utilizzato sul client (vedere l'esempio sopra).
Per ulteriori informazioni sulle istruzioni del preprocessore e sulle direttive di compilazione, consultare la sezione "Esecuzione di procedure e funzioni" della guida del linguaggio incorporato.
La proprietà Call Server ha lo scopo di controllare la capacità di chiamare metodi esportati del modulo comune del server dal codice client.
Se la proprietà è impostata, i metodi esportati del modulo comune del server sono disponibili per la chiamata dal lato client. Se la proprietà non è impostata, tali metodi esportati possono essere chiamati solo da metodi lato server (entrambi i metodi dei moduli comuni lato server e i metodi lato server dei moduli modulo e dei moduli comando).
Consiglio . Si consiglia di impostare la proprietà Server Call su False nei casi in cui il modulo comune del server contiene metodi che non si desidera chiamare dal client (ad esempio, per motivi di sicurezza).
Nota. Se le proprietà vengono impostate contemporaneamente Cliente (applicazione regolare), Client (applicazione gestita), Unione esterna, la proprietà Server di chiamata viene reimpostata automaticamente. Se è impostata la proprietà Server di chiamata, le proprietà vengono reimpostate automaticamente Cliente (applicazione regolare), Client (applicazione gestita) E Unione esterna, se queste proprietà sono state impostate contemporaneamente.
Proprietà Privilegiato ha lo scopo di disabilitare il controllo dei diritti di accesso durante l'esecuzione dei metodi di un modulo comune.
NOTA. Se la proprietà Privilegiato installato, la proprietà Server viene impostata automaticamente per il modulo comune e le restanti proprietà vengono reimpostate ( Cliente (applicazione regolare), Client (applicazione gestita) e B collegamento esterno). Un modulo condiviso privilegiato può essere eseguito solo sul server.

Riutilizzo dei valori restituiti

Se il modulo condiviso non è globale, diventa disponibile la proprietà Riutilizza valori restituiti. Questa proprietà può assumere i seguenti valori:
● Non utilizzare: non è previsto il riutilizzo dei valori restituiti per le funzioni in questo modulo comune.
● Per chiamata e per sessione: il modulo condiviso utilizza un metodo per determinare il riutilizzo dei dati. L'essenza di questo metodo è che durante l'esecuzione del codice, il sistema ricorda i parametri e il risultato delle funzioni dopo la prima chiamata alla funzione. Quando una funzione viene richiamata nuovamente con gli stessi parametri, viene restituito il valore memorizzato (della prima chiamata) senza eseguire la funzione stessa. Se una funzione modifica i valori dei parametri durante la sua esecuzione, richiamare nuovamente la funzione non farà ciò.
È possibile evidenziare le seguenti funzionalità di salvataggio dei risultati delle chiamate:
● se una funzione viene eseguita sul server e richiamata dal codice server, i valori dei parametri e il risultato della chiamata vengono ricordati per la sessione corrente sul lato server;
● se la funzione viene eseguita su un Thick o Thin Client, i valori dei parametri e i risultati della chiamata vengono ricordati lato client;
● se una funzione viene eseguita lato server e chiamata dal codice client, i valori dei parametri di chiamata vengono ricordati sia lato client che lato server (per la sessione corrente).
I valori salvati vengono cancellati:
● se la proprietà è impostata su Per tutta la durata della chiamata:
● lato server – quando si restituisce il controllo dal server;
● lato client – ​​quando termina una procedura o funzione del linguaggio integrato di livello superiore (chiamata dal sistema dall'interfaccia e non da un'altra procedura o funzione del linguaggio integrato);
● se la proprietà del modulo condiviso è impostata su Per tutta la durata della sessione:
● lato server – al termine della sessione;
● sul lato client – ​​quando si chiude l'applicazione client.
I valori salvati verranno cancellati:
● sul server, nel Thick Client, nella connessione esterna, nel Thin Client e nel Web Client alla normale velocità di connessione - 20 minuti dopo il calcolo del valore memorizzato o 6 minuti dopo l'ultimo utilizzo;
● in un thin client e un web client con una velocità di connessione bassa – 20 minuti dopo il calcolo del valore salvato;
● se manca la RAM nel processo di funzionamento del server;
● quando si riavvia il flusso di lavoro;
● quando si passa da un cliente a un altro flusso di lavoro.
Dopo aver rimosso i valori, la chiamata alla funzione esportata viene eseguita come nella prima chiamata.
Questa proprietà dei moduli comuni non influisce sull'esecuzione delle procedure: le procedure vengono sempre eseguite.

Se un modulo comune è impostato per riutilizzare i valori restituiti, vengono imposte una serie di restrizioni sui tipi di parametri esportati dalla funzione. I tipi di parametri possono essere solo:
● Tipi primitivi ( Non definito, NULL, Booleano, Numero, Stringa, Data).
● Qualsiasi riferimento agli oggetti del database.
● Strutture con valori di proprietà dei tipi sopra indicati. In questo caso l'identità dei parametri è controllata “dal contenuto” delle strutture.
Se la funzione esportata restituisce un oggetto, in realtà restituisce un riferimento all'oggetto memorizzato nella cache. Se dopo aver ricevuto questo riferimento si verifica un cambiamento nello stato dell'oggetto, una successiva chiamata alla stessa funzione comporterà la restituzione di un riferimento all'oggetto già modificato senza eseguire effettivamente la funzione. Questo comportamento continuerà finché il valore memorizzato non verrà eliminato (per qualsiasi motivo). In altre parole, la modifica dello stato di un oggetto risultante da una chiamata di funzione da un modulo comune con riutilizzo dei valori restituiti non è la base per l'effettiva chiamata di funzione. Dovresti anche ricordare che la cache degli oggetti restituiti è indifferente
stato della modalità privilegiata nel momento in cui viene chiamata la funzione, riutilizzando i valori restituiti. Questa funzionalità può portare al seguente comportamento:
● L'effettiva esecuzione della chiamata di funzione con riutilizzo dei valori restituiti (la prima chiamata) è stata eseguita con la modalità privilegiata abilitata.
● Durante l'esecuzione di una funzione, è stato ricevuto un oggetto che non può essere ricevuto con la modalità privilegiata disabilitata.
● Le successive chiamate alla funzione sono state eseguite senza impostare la modalità privilegiata.
● Tuttavia, finché la cache dell'oggetto restituito non viene svuotata o finché non viene effettuata nuovamente la chiamata effettiva, la funzione restituirà un oggetto formalmente inaccessibile.
● È vero anche il comportamento inverso, quando la prima chiamata viene effettuata senza impostare la modalità privilegiata e in modalità privilegiata non viene restituito un oggetto che avrebbe potuto essere ricevuto in modalità privilegiata.

Se un modulo comune ha la proprietà Riutilizzo dei valori restituitiè impostato su Per tutta la durata della sessione, i valori di tipo non possono essere utilizzati nei valori restituiti dalle funzioni di tale modulo Gestore degli orari.
Se una funzione di un modulo condiviso, con la riusabilità impostata, viene chiamata dall'interno dello stesso modulo condiviso (ad esempio, denominato GeneralModule), è necessario tenere presente il seguente avvertimento: se la funzione viene chiamata con il nome MyFunction() , quindi la funzione verrà eseguita ogni volta che viene chiamata la funzione. Affinché i valori memorizzati possano essere utilizzati, la funzione deve essere chiamata con il suo nome completo:
GeneralModule.MyFunction().
Il metodo del contesto globale rimuove tutti i valori riutilizzati, sia lato server che lato client, indipendentemente da dove viene chiamato il metodo. Dopo aver eseguito il metodo AggiornaValoriRiutilizzati() la prima chiamata di funzione verrà eseguita completamente.

Oggi esamineremo i moduli comuni, cosa sono, perché sono necessari e come utilizzarli. È possibile inserire funzioni utilizzate in diversi documenti in un modulo comune. Ad esempio, calcolando l'importo nella parte tabellare del documento.

Prendiamo ad esempio la nostra vecchia configurazione, che utilizzavo negli articoli precedenti. Sono presenti due documenti: Arrivo delle merci al magazzino e Rilascio delle merci al magazzino. Entrambi i documenti hanno procedure che calcolano l'importo in una riga tabellare.

Ogni documento contiene lo stesso codice per il calcolo dell'importo.

Procedura MaterialiPriceOnChange(Elemento)
Riga TabularPart = Elements.Materials.CurrentData;
TabularPartLine.Amount = TabularPartLine.Quantity * TabularPartLine.Price;
FineProcedura

Oggi lo sposteremo in un modulo comune e lo chiameremo dal documento.

Creiamo un modulo generale per il calcolo dell'importo

E quindi iniziamo, prima devi creare un modulo comune. Per fare ciò, vai nel configuratore, cerca la voce Moduli generali, clicca col tasto destro e aggiungine di nuovi, scrivi il nome WorkWithDocuments. Inseriamo il seguente codice al suo interno.

Assicurati inoltre di selezionare le caselle accanto a Client (applicazione gestita) e Server nella finestra delle proprietà.

Ora devi modificare leggermente il codice nel modulo del modulo documento. A sinistra nella configurazione cerchiamo il documento Arrivo Merci, espandiamo la finestra alla finestra Moduli, facciamo doppio clic su Modulo Documento e nella finestra del modulo che si apre andiamo alla scheda Modulo in basso. Abbiamo questo codice

Questa procedura funziona quando si modifica la Quantità nella parte tabellare del documento Entrata Merci e calcola l'importo.

&SuClient



FineProcedura

E questa procedura inizia a funzionare quando il Prezzo cambia nella parte tabellare del documento Entrata Merci e calcola l'importo.

&SuClient

Riga TabularPart = Elements.Materials.CurrentData;
TabularPartLine.Amount = TabularPartLine.Quantity * TabularPartLine.Price;
FineProcedura

Sostituiscilo con questo

&SuClient
Procedura MaterialiQuantityOnChange(Elemento)
Riga TabularPart = Elements.Materials.CurrentData;

FineProcedura
&SuClient
Procedura MaterialiPriceOnChange(Elemento)
Riga TabularPart = Elements.Materials.CurrentData;
WorkWithDocuments.CalculateSum(TabularPartRow);
FineProcedura

Come hai notato, cambia solo una riga, a prima vista può sembrare che una riga sia stata sostituita da un'altra. Ma non dimenticare che questo è un esempio. Infatti, la quantità di codice può essere molto maggiore se, ad esempio, hai eseguito calcoli utilizzando una formula complessa, nel qual caso il codice verrà notevolmente ridotto.

Facciamo lo stesso per il documento Rilascio della merce dal magazzino, eseguiamo e controlliamo la funzionalità del codice. Quindi tu ed io abbiamo realizzato il primo modulo comune, spero che il mio articolo possa essere utile a qualcuno.

I migliori articoli sull'argomento