Determina il tipo di valore in base al nome in 1 s. Utilizzo di tipi definiti. Creazione di gestori eventi client modulo

Tipi di dati in 1C:Enterprise 8.x

Prima di immergerci nei costrutti del linguaggio incorporato, dovremmo acquisire familiarità con i tipi di dati di base. Fortunatamente,:

Coloro che iniziano a studiare la piattaforma 1C a volte si confondono sulla definizione dei tipi di dati e su tutti i tipi di sfumature linguistiche che si presentano. Questo primo articolo è introduttivo ed è dedicato ai tipi di dati primitivi 1C, non ce ne sono così tanti.

Numero. I numeri in 1C indicano sia valori interi che valori in virgola mobile. La lunghezza massima di un valore di tipo numerico può essere di 32 caratteri, incluso il punto decimale. Vale anche la pena considerare che il limite di 32 cifre si applica ai numeri che verranno scritti nel database. È possibile dichiarare una variabile e assegnarle un valore maggiore di 32 caratteri. Per i valori numerici archiviati in memoria, questa limitazione non si applica. Una volta dichiarata come variabile di tipo “Numero”, il suo valore sarà 0.

Linea. Come ogni altro linguaggio di programmazione, 1C implementa tutte le funzioni necessarie per manipolare le stringhe. I valori di questo tipo sono rappresentati in Unicode. La lunghezza delle variabili di tipo stringa non è limitata.

Data di. I valori di questo tipo contengono oltre alla data stessa anche l'ora. Il tempo si riferisce a ore, minuti e secondi. Immediatamente dopo aver inizializzato una variabile del tipo “Data”, le verrà assegnato il valore (data) “01 gennaio 0001 00 ore 00 minuti 00 secondi”. Questo a volte provoca irritazione, ma col tempo ci si abitua.

Booleano. È chiaro che variabili di questo tipo possono assumere solo due valori: True, False.

Non definito. I valori di tipo "undefinito" vengono utilizzati nei casi in cui è necessario specificare un valore vuoto che non appartiene a nessun altro tipo di dati. Ad esempio, devi dichiarare una variabile che verrà poi utilizzata da qualche parte. Puoi assegnargli un valore come 0 o "" (cioè una stringa vuota), ma così facendo impostiamo immediatamente il tipo appropriato (un numero o una stringa). Ma cosa succederebbe se l'installazione di uno di questi tipi potesse interferire in seguito? In questi casi, è possibile utilizzare un valore del tipo "non definito". Vale anche la pena notare che molte funzioni del linguaggio integrato, in caso di esecuzione non riuscita, restituiscono come risultato un valore di questo tipo. Quando si descrivono le proprie funzioni, si consiglia di seguire la stessa regola.

Nullo. Il significato generale di Null è quasi lo stesso di “indefinito”. Valori di questo tipo vengono utilizzati per indicare un valore mancante nel database. Molto spesso è possibile ottenere valori di questo tipo utilizzando un linguaggio di query. Ad esempio, una query che utilizza i join di tabella. Supponiamo che una delle tabelle non abbia un valore che soddisfi la condizione. In questo caso, il valore mancante verrà sostituito da un valore di tipo Null.

È possibile riscontrare un valore di tipo Null non solo quando si lavora con le query. Ad esempio, i valori di tipo Null vengono accettati dagli attributi che non vengono utilizzati dall'oggetto. Immaginiamo di avere una directory gerarchica con l'attributo “quantità”. Durante la creazione di questo attributo, la sua proprietà "Usa" è stata impostata su "Per elemento". Se provi ad accedere a questo attributo per un elemento di directory del tipo "gruppo", il suo valore sarà Null.

Tipo. Questo tipo viene utilizzato per definire i tipi disponibili. Sembra un po' confuso? Ok, provo a spiegarmi con un esempio. Immagina di dover affrontare il compito di confrontare i tipi di due variabili. Nel codice sarebbe simile a questo:

Variabile1 = 123; //Poiché abbiamo assegnato un numero, il tipo della variabile sarà "numero".
Variabile2 = "stringa"; //Qui abbiamo assegnato una stringa, il che significa che il tipo della variabile sarà stringa.

Ora devi essere sicuro al 100% che la variabile1 sia numerica. È qui che il tipo "Tipo" (sembra strano) torna utile, così come un paio di funzioni ausiliarie. Per ora non entrerò nei dettagli. Dai un'occhiata e prova a capire l'esempio seguente:

Se (TipoValore(Variabile1) = Tipo("Numero")) Allora

Report("La variabile1 è numerica!");

Altrimenti

Report("La variabile1 NON è numerica:()");

finisci se;

In questo piccolo pezzo di codice, ottengo innanzitutto il tipo della variabile utilizzando la funzione TypeValue(). Questa funzione prende come parametro il valore di cui si vuole ottenere il tipo. Nel nostro caso è “Variabile1”. Successivamente devo ottenere un valore di tipo "Type" che caratterizzi il tipo "Number". A questo scopo il linguaggio integrato mette a disposizione la funzione “Type()”. Richiede solo un argomento: una rappresentazione di stringa del nome del tipo. Poiché dobbiamo confrontare con il tipo "Numero", il parametro per la funzione sarà "Numero".

Ringrazio Igor Antonov per il suo aiuto nella stesura di questo articolo.

Accedi al sito come studente

Accedi come studente per accedere ai materiali scolastici

Linguaggio di programmazione interno 1C 8.3 per programmatori principianti: tipi di dati in 1C

Adesso sappiamo come forzare il computer a eseguire i nostri comandi (usando come esempio il comando “Report”) e come passare determinati parametri ai comandi (il testo del messaggio che segue tra parentesi dopo “Report”). Ci siamo anche accorti che tutti i comandi sono separati da punto e virgola.

Tipi di dati

Una delle principali attività di programmazione è l'elaborazione dei dati, quindi scopriamo quali sono i principali tipi di dati nel linguaggio 1C:

  • Linea. Un eccellente esempio di tali dati è una citazione da una poesia "La tempesta copre il cielo di oscurità,". Tieni presente che i dati di tipo String sono sempre racchiusi in virgolette.
  • Numero. Conosciamo tutti il ​​tipo di dati. Spesso ce ne occupiamo nella vita reale: al lavoro nel giorno di paga e poi in negozio. I numeri, come ovviamente sai, possono esserlo Totale E frazionario. Un esempio di numero intero: 1000000 e una frazione: 3,14. La parte frazionaria viene separata dalla parte intera punto. I numeri hanno anche un segno: più O meno.
  • data. La tua data di nascita è un esempio di questo tipo di dati. Include anno, mese e giorno. Ad esempio, il primo volo spaziale con equipaggio ebbe luogo il 12 aprile 1961. Nel linguaggio informatico, questi dati appariranno così: " 19610412 ". Cerca di capire da solo perché è così. La data è sempre virgolette singole ().

Compito n. 6. Annotare in formato informatico (utilizzando l'apposita tipologia di dati) le risposte alle seguenti domande:

  1. Quando è stato lanciato il primo satellite artificiale?
  2. Qual era il nome del primo cosmonauta?
  3. Quanti pianeti ci sono nel sistema solare?

Controllati

Sulla base dei risultati dell'attività n. 7, si può trarre una conclusione interessante: non solo le stringhe, ma anche i dati di qualsiasi altro tipo possono essere passati come parametro al comando Report.

Elaborazione dati

Ora, finalmente, elaboriamo questi dati! Quali operazioni possiamo eseguire sui dati? Dipende dal loro tipo.

Ad esempio possiamo connettere le stringhe tra loro utilizzando il segno di addizione:

Per espressioni aritmetiche più complesse, utilizzare le parentesi:

Compito n. 8. Esegui i seguenti esempi sul tuo computer.

I tipi definiti sono un nuovo oggetto di metadati 1C apparso nella versione 8.3 della piattaforma. L'oggetto è di natura ausiliaria. Consideriamo quali sono i tipi definiti e i compiti che questo oggetto può risolvere.

Vengono definiti nuovi tipi di dati, il cui insieme è determinato dallo sviluppatore della soluzione applicativa. È costituito da diversi tipi validi. Questo tipo di dati può essere il tipo di qualsiasi attributo di configurazione, ad eccezione del tipo definito stesso e dell'oggetto " ".

Ottieni 267 lezioni video su 1C gratuitamente:

Impostazioni

Non ci sono così tante impostazioni per questo oggetto:

Quelli. oltre al nome e al sinonimo in 1C, i tipi definiti hanno solo un insieme di tipi di oggetto.

Un esempio di utilizzo dei tipi definiti in 1C 8.3

Per questo oggetto è possibile trovare una grande varietà di applicazioni.

Esempi di utilizzo:

  • è possibile descrivere nella configurazione i dettagli che fanno riferimento ai dati che verranno definiti quando il frammento sarà incorporato in una configurazione specifica;
  • assegnare un tipo di dati definiti a un determinato insieme di sottoscrizioni di eventi; quando l'insieme di tipi cambia, la fonte cambierà dinamicamente per tutte le sottoscrizioni;
  • utilizzare in alternativa al piano delle tipologie caratteristiche

e altro ancora.

Se stai iniziando a imparare la programmazione 1C, ti consigliamo il nostro corso gratuito (non dimenticare

/
Creazione e modifica di oggetti di metadati

Utilizzo di tipi definiti

Ambito di applicazione: applicazione gestita, applicazione normale.

1. I tipi definiti hanno lo scopo di definire tipi di dati che descrivono entità utilizzate di frequente o che con un alto grado di probabilità possono cambiare durante l'implementazione di una soluzione applicativa. Consentono di riutilizzare il tipo o l'insieme di tipi descritti senza specificarne la composizione in vari punti della configurazione (nei dettagli, nelle proprietà degli oggetti, nei moduli, ecc.).

Vedi anche l'articolo su ITS: “Configuration Objects – Defined Types”

2.1. Per definire un tipo semplice e i suoi qualificatori che hanno un significato applicato, utilizzato in vari attributi, risorse, attributi di modulo, layout, ecc. all'interno di qualsiasi sottosistema o nell'intera soluzione applicativa. Ciò garantisce che i dati abbiano la stessa lunghezza e precisione in tutti i luoghi di utilizzo e semplifica la modifica se i requisiti cambiano.
Per esempio:

  • Numero di fattura- Stringa, lunghezza 30. Regola il formato del numero di fattura nei vari documenti: Ricezione di beni e servizi, IngressoLibriShopping, Restituzione della merce dal cliente e così via.
  • Indirizzo di consegna- Stringa, 500. Rappresentazione testuale dell'indirizzo di consegna nei documenti Ordine al fornitore, Indirizzo di consegnaTrasportatore, in corso Assistente alle vendite, negli oggetti di scena Indirizzo di consegnaTrasportatore documento Richiesta di restituzione della merce da parte del cliente e così via.

2.2. Per definire un tipo composito ampiamente utilizzato negli oggetti di un sottosistema o nell'intera soluzione applicativa. Il tipo definito garantisce la stessa composizione (tipo) dei dati in tutti i luoghi di utilizzo e semplifica inoltre la modifica e l'implementazione dei sottosistemi nelle configurazioni dell'applicazione.

Ad esempio, la configurazione include un sottosistema Interazioni, destinato allo svolgimento della corrispondenza e-mail, alla registrazione di chiamate e riunioni. Durante l'implementazione di questo sottosistema, lo sviluppatore ha deciso la composizione degli oggetti di metadati che possono fungere da "contatti di interazione": questi sono elementi delle directory Individui, Partner, Persone di contattoPartner e ha specificato questa composizione di tipi nel tipo definito ContattoInterazioni forniti nel sottosistema. A sua volta, il tipo definito è ampiamente utilizzato nei dettagli degli oggetti e nei moduli dei sottosistemi (nei documenti Incontro, Interazione pianificata- parte tabellare Partecipanti, nel documento MessaggioSMS– parte tabellare Destinatari, nel documento Telefonata- oggetti di scena Contatto abbonato, nelle forme generali La rubrica, Seleziona Contatto- requisiti ContattiIn materia,nel parametro layout Gerarchia delle interazioniContatto giornale documentale Interazioni ecc.) Altrimenti, senza utilizzare un tipo definito ContattoInterazioni sarebbe necessario rimuovere gli oggetti del sottosistema dal supporto e specificare la composizione richiesta dei tipi in tutti i luoghi elencati.

2.3. Quando si sviluppa un sottosistema implementato, per ridefinire il tipo di applicazione, che verrà specificato durante l'implementazione.
Ad esempio, tipo di sottosistema Fornitori durante l'implementazione può essere sostituito con un tipo di configurazione dell'applicazione Controparti.

3. Non è corretto utilizzare i tipi definiti per definire un "sinonimo" per un tipo esistente, "sostituire" entità, per uso locale (non di massa) all'interno di un sottosistema (configurazione) senza la necessità di implementazione in altre configurazioni, solo per motivi di facilità di modifica. Di norma, ciò indica un errore di progettazione o una scelta metodologicamente errata del nome del tipo originale.

Continuiamo la nostra conoscenza con la nuova funzionalità di 1C:Enterprise, iniziata nel precedente articolo della serie. Dopo aver studiato i materiali contenuti in questo articolo, imparerai:

  • Cosa sono i tipi definiti e come utilizzarli?
  • A cosa serve la proprietà di configurazione "Ruoli primari"?
  • Come utilizzare l'helper per creare gestori di eventi client per un modulo?
  • Come e perché viene utilizzato il caricamento della configurazione su file XML?

Applicabilità

L'articolo discute la versione 8.3.4.437 della piattaforma 1C:Enterprise, ma i suoi materiali potrebbero essere utili anche per coloro che lavorano su versioni precedenti.

Come semplificare lo sviluppo in 1C:Enterprise 8.3

Continuiamo a considerare le innovazioni nella piattaforma 1C:Enterprise 8 volte a facilitare la configurazione.

Tipi definiti

Nella piattaforma 8.3 è stato aggiunto un nuovo oggetto al ramo di configurazione “Generale” - Tipologie definite.

Si tratta di un oggetto di configurazione speciale progettato per definire un tipo di dati che descrive un'entità utilizzata di frequente o che potrebbe cambiare quando viene implementata una soluzione applicativa.

Si consideri, ad esempio, un tipo composito che include un collegamento alle directory “Controparti” e “Individui”.

E questo tipo, in alcune configurazioni sviluppate, viene spesso utilizzato come dimensione nel registro delle informazioni che descrive le informazioni di contatto, come dettaglio nel documento "Ordine di ricevuta di cassa", ecc.

Durante l'implementazione di tale configurazione, la composizione di questo tipo può cambiare - è possibile aggiungervi nuovi oggetti e viceversa - è possibile escludere tipi non necessari.

Se invece del nostro nuovo “tipo definito” usiamo un tipo composito in ogni luogo in cui viene utilizzata tale entità, allora dovremo cambiare la composizione dei tipi ovunque. È lungo, difficile, laborioso e c'è la possibilità di dimenticare alcuni oggetti di scena.

Se si utilizza un tipo definito, durante il processo di finalizzazione della soluzione applicativa, sarà necessario modificare solo la definizione di questo tipo (e il codice del programma che elabora tali campi).

Tutti i dettagli per i quali è specificato il tipo definito come tipo verranno modificati automaticamente.

Ecco un altro esempio di utilizzo di un tipo definito.

Per alcuni dettagli è presente uno standard di digitazione all'interno della configurazione. Ad esempio, definiamo una quantità come un numero di lunghezza 15 con una precisione di 3 e una somma come un numero di lunghezza 15 con una precisione di 2.

Supponiamo che un'impresa abbia bisogno di tenere registri di merci costose con elevata precisione del loro peso.

Di conseguenza, dovevamo aumentare la precisione dei dettagli per tenere conto della quantità fino a 4 cifre decimali. Queste modifiche devono essere apportate contemporaneamente a tutti i dettagli del documento e alle risorse del registro.

Questo non è un compito difficile, ma richiede molto lavoro e richiede grande cura e perseveranza da parte dello sviluppatore.

Quando crei un nuovo tipo definito, devi solo specificarne il tipo. Quindi, durante la creazione dei dettagli del documento e la registrazione delle risorse, è possibile selezionare un collegamento al tipo definito creato.

Questo approccio ci consente di garantire lo stesso tipo di dato (stessa lunghezza, precisione, stessa composizione per i campi di tipo composito, ecc.) in tutti i luoghi in cui viene utilizzato.

Quindi, se è necessario modificare il tipo di dati di tutti i dettagli, non è necessario correggere manualmente ciascun attributo separatamente, è sufficiente apportare modifiche al tipo definito corrispondente;

Un tipo definito può essere creato come tipo composito. Tuttavia, esistono restrizioni sull'uso di questo oggetto di configurazione. Pertanto, il tipo da definire non può far parte del tipo di valore del piano dei tipi di caratteristiche e non può nemmeno far parte del tipo di dati composito di un altro attributo.

Si noti che nella versione 8.3.5 della piattaforma, le possibilità di utilizzo dei tipi definiti sono state aumentate espandendo l'insieme di tipi che possono far parte di un tipo definito.

Non ci sono state ulteriori modifiche nel lavorare con il tipo definito fino alle attuali versioni della piattaforma 8.3.10/8.3.11.

Proprietà di configurazione “Ruoli primari”

Nella piattaforma 8.2, l'elemento di configurazione root aveva la proprietà "Ruolo primario", in cui lo sviluppatore definiva il ruolo che sarebbe stato utilizzato se non ci fossero stati utenti nell'infobase.

Nella piattaforma 8.3 è diventato possibile specificare più ruoli che verranno utilizzati per determinare i diritti di accesso quando l'elenco degli utenti è vuoto. Di conseguenza, la proprietà è stata ribattezzata “Ruoli principali”.

Per ingrandire cliccare sull'immagine.

Creazione di gestori eventi client modulo

Quando si configura un'applicazione gestita, lo sviluppatore deve monitorare attentamente il contesto di esecuzione del codice utilizzando le direttive appropriate del preprocessore.

Poiché sul client è disponibile un insieme limitato di tipi di dati e metodi, lo sviluppatore spesso deve creare una procedura client da cui trasferire il controllo al server.

Nella piattaforma 8.3 è apparso un assistente per la creazione di gestori per gli eventi del modulo client.

Per ingrandire cliccare sull'immagine.

Ora lo sviluppatore non ha più bisogno di creare manualmente un metodo server e specificarne la chiamata all'interno di una procedura client, ma può concentrarsi interamente sull'implementazione della logica applicativa del sistema.

Caricamento della configurazione nei file

Un'altra innovazione della piattaforma 8.3 è la possibilità di caricare l'intera configurazione su disco sotto forma di un insieme di file di una determinata struttura.

La configurazione viene sempre caricata nella sua interezza, senza possibilità di filtrare gli oggetti caricati.

Per caricare la configurazione su file, è necessario selezionare Configurazione – Carica configurazione su file nel menu e, nella finestra di dialogo che si apre, selezionare la directory in cui verranno salvati i file.

Gli oggetti di configurazione vengono caricati come una serie di file XML. I moduli e i layout di testo vengono salvati come file TXT. Le immagini della configurazione vengono salvate come file immagine (BMP, PNG, ecc.). Le informazioni della guida vengono caricate in file HTML.

Per ingrandire cliccare sull'immagine.

Come puoi vedere, i file risultanti hanno formati universali comunemente utilizzati. Esistono numerosi prodotti software diversi per modificarli.

Puoi anche utilizzare sistemi di controllo della versione di terze parti. Consentono di archiviare diverse versioni dello stesso documento, di tornare alle versioni precedenti se necessario e di determinare chi ha apportato una particolare modifica e quando.

I file modificati possono essere ricaricati nella configurazione utilizzando la voce di menu Configurazione – Carica configurazione dai file.

L'utilizzo della nuova funzionalità di caricamento/scaricamento è disponibile anche utilizzando i parametri della riga di comando LoadConfigFromFiles e DumpConfigToFiles. Ad esempio, in questo modo:

“c:\Programmi (x86)\1cv8\8.3.4.437\bin\1cv8.exe” DESIGNER /F “X:\Platform8Demo” /N “Amministratore” /DumpConfigToFiles “X:\1\”

In precedenza, nella piattaforma 8.2, esisteva un meccanismo per caricare/scaricare i file di configurazione, che consentiva il caricamento/download selettivo di alcune proprietà degli oggetti di configurazione (moduli, layout e informazioni di riferimento).

Si è notato che di default i comandi “Carica file di configurazione” e “Carica file di configurazione” sono esclusi dal configuratore nella piattaforma 8.3.

Tuttavia, personalizzando il menu principale, è possibile visualizzare questi comandi nel menu e utilizzarli.

Il nuovo meccanismo di caricamento delle configurazioni su file carica sempre l'intero dato di configurazione non è prevista la possibilità di configurare oggetti per il caricamento, garantendo così l'integrità della configurazione;

I moduli e le interfacce regolari vengono caricati in formato binario (interno) e non possono essere modificati. Anche la configurazione del provider non è destinata a essere modificata.

Gli oggetti rimanenti vengono caricati su file di formati universali. Essenzialmente, il meccanismo è focalizzato sull'applicazione gestita.

Il nuovo meccanismo fornisce allo sviluppatore la possibilità di elaborare automaticamente la configurazione avviando il configuratore in modalità batch.

Inoltre ora la configurazione può essere modificata da software esterni utilizzando, ad esempio, il formato XML.

Durante lo scaricamento, viene eseguita un'ulteriore elaborazione della configurazione: i collegamenti congelati vengono eliminati, anche le informazioni non utilizzate non vengono scaricate (ad esempio, la guida per una lingua inesistente).

E quando si carica una configurazione, viene verificata la sua integrità; non è consentito caricare file con identificatori non univoci, oggetti di metadati, nomi di tipi di dati errati, ecc.

Tieni presente che dalla versione 8.3.7 è apparso un nuovo formato di caricamento, chiamato “gerarchico”. Il vecchio formato divenne noto come “lineare”. La selezione del formato è disponibile nella finestra di caricamento del file:

A partire dalla versione 8.3.11, il formato “gerarchico” è diventato l’unico selezionabile durante il caricamento interattivo:

Se utilizzi questa funzionalità, ti consigliamo:

  • in primo luogo, utilizzare un formato di caricamento “gerarchico”;
  • in secondo luogo, utilizzare una piattaforma non inferiore alla versione 8.3.8+, perché a partire da esso, la velocità di caricamento/upload dei file XML è stata notevolmente aumentata.

Nella versione 8.3.10 è stato supportato il caricamento parziale della configurazione su file XML. Di conseguenza, è diventato possibile utilizzare il caricamento della configurazione in XML insieme a Git.

  • Sergej Savenkov

    una specie di recensione “breve”... come se avessero fretta da qualche parte