Trova un elemento nell'elenco dei valori 1c. Struttura della collezione universale

Di cosa parla questo articolo?

Questo articolo continua la serie di articoli "Primi passi nello sviluppo 1C". Copre i principi di lavoro con le collezioni universali. Dopo aver letto l'articolo, imparerai:

  • Cosa sono le collezioni universali, quando e in quali casi dovrebbero essere utilizzate?
  • Cosa hanno in comune tutte le collezioni universali? Quali tecniche puoi utilizzare per lavorare con tutti loro?
  • Cos'è un array, come e quando usarlo? Che metodi ha?
  • Perché utilizzare una struttura? In cosa differisce da un array?
  • Quando dovresti utilizzare un elenco di valori? Come visualizzarlo nel modulo?
  • Compliance: cos’è e quando utilizzarla? Quali sono i vantaggi in termini di struttura?
  • A cosa serve la tabella dei valori? Come descrivere la sua struttura? Come aggiungere/rimuovere linee? Come visualizzarlo nel modulo?
  • Albero dei valori: a cosa serve? Come compilare e visualizzare il modulo? Come lavorarci?

Applicabilità

L'articolo discute la piattaforma 1C:Enterprise 8.3 dell'edizione attuale.

Come lavorare con le collezioni universali in 1C

Una raccolta di valori è un contenitore che solitamente può contenere un numero qualsiasi di elementi. Tuttavia, spesso non esistono restrizioni rigorose sul tipo di dati.

Puoi aggiungere valori a una raccolta generica. Tutti i valori della raccolta possono essere attraversati. Queste raccolte vengono utilizzate principalmente per qualche tipo di elaborazione negli algoritmi. Quelli. Queste sono alcune strutture dinamiche che esistono mentre l'algoritmo è in esecuzione.

È importante capire che le raccolte non sono archiviate in un database (non stiamo parlando del tipo di dati Value Store, che può archiviare quasi tutti i tipi di dati).

Esistere diversi tipi raccolte universali: Array, Struttura, Corrispondenza, Array fisso, Tabella valori, Parte tabellare eccetera. Ma tutte le raccolte hanno un comportamento simile.

Una raccolta può essere creata come risultato dell'operazione di una funzione (la funzione restituisce una raccolta universale come valore).

È possibile ottenere manualmente una nuova raccolta chiamando il costruttore e creando un'istanza della classe.

Per esempio: OurArray = Nuovo array;

I costruttori di molte raccolte generiche sono parametrizzati.

Quindi, nel costruttore for È possibile specificare il numero di membri nelle dimensioni corrispondenti. Quelli. puoi immediatamente dichiararlo multidimensionale .

La descrizione corrispondente del costruttore si trova nell'assistente alla sintassi.

Pertanto, utilizzando i parametri del costruttore, è possibile impostare immediatamente il comportamento desiderato di questo oggetto.

Ma i parametri sono facoltativi; lo sviluppatore non può impostarli e definire ulteriormente il comportamento dell'Array come meglio crede.

Quasi tutte le raccolte universali possono essere create utilizzando un costruttore (l'eccezione sono le parti della tabella, che agiscono come oggetti di configurazione).

Per le collezioni universali esistono concetti comuni come indice e numero. Ogni elemento della collezione ha un indice. In questo caso l'indice parte da zero.

Per accedere ad un elemento OurArray, è possibile utilizzare l'accesso all'indice; per questo, l'indice è indicato tra parentesi quadre.

Per esempio, OurArray. Da notare che in questo caso il sistema restituisce l'elemento Array con indice 3, e nell'ordine questo è il quarto elemento dell'Array.

Per alcune collezioni esiste anche il concetto di numero di riga. Il numero di riga inizia con uno. Ad esempio, per la parte tabellare esiste una proprietà come il numero di riga. È importante tenere presente che se conosciamo il numero di riga e vogliamo accedervi tramite l'indice, dovremmo utilizzare come indice un valore inferiore di uno rispetto al numero di riga.

Il concetto di numero di riga non esiste in tutte le raccolte, ma principalmente in quelle che possono essere visualizzate nell'interfaccia utente.

Tutte le raccolte utilizzano l'attraversamento degli elementi della raccolta. Il bypass è possibile in due modi: ciclo per E ciclo Per ciascuno di.

I metodi applicabili alla maggior parte delle raccolte generiche sono Conteggio, Indice, Aggiungi, Inserisci, Elimina e Trova.

Count è una funzione che restituisce il numero di elementi in una raccolta. Può essere utilizzato prima di un ciclo Per, come mostrato in figura.

Il metodo Index non esiste per tutte le raccolte, ma solo per quelle i cui elementi possono essere referenziati. Un esempio è Tabella dei valori.

Tabella dei valori– questa è una raccolta specifica di righe; le righe possono contenere diverse colonne con diversi tipi di valori.

Ogni linea rappresenta un'entità indipendente. Puoi ottenere un collegamento ad esso; attraverso questa riga puoi accedere ai valori delle colonne in questa riga.

Il metodo Index consente di determinare quale indice corrisponde a una determinata riga (ovvero, la posizione corrente della riga nella tabella). I valori dell'indice iniziano da zero.

Quasi ogni collezione universale dispone di metodi per aggiungere nuovi valori a una determinata collezione. La figura mostra come riempire un Array con valori da 0 a 10 in due modi.

Per aggiungere un elemento all'Array possiamo usare il metodo Aggiungere, indicare tra parentesi il valore da aggiungere. In questo caso il valore verrà aggiunto alla fine dell'elenco, ovvero L'array aumenterà costantemente a causa dell'ultima posizione.

Un altro metodo che permette di aggiungere valori ad una collezione è il Inserire. È diverso dal metodo Aggiungere in quanto è possibile specificare dove inserire l'elemento aggiunto.

Sintassi: Inserisci (,)

Il primo parametro specifica l'indice in cui verrà inserito il nuovo valore. Quelli. ad esempio possiamo specificare che ogni valore debba essere inserito all'inizio della lista (secondo metodo nella figura sopra).

Per rimuovere elementi da una raccolta, utilizzare il metodo Eliminare. Il metodo Elimina specifica per indice quale elemento elimineremo.

Sintassi: Eliminare()
Esempio di utilizzo: OurArray.Delete(5);

È opportuno notare che per quelle raccolte in cui le stringhe rappresentano un'entità indipendente (ad esempio, for Tabelle dei valori), possiamo anche utilizzare il metodo per ottenere l'indice per eliminare successivamente questa riga.

Quasi tutte le collezioni hanno un metodo per cercare un valore: Trovare. Il valore che vogliamo trovare viene passato al metodo. Alcune raccolte ti consentono di impostare alcune restrizioni.

Ad esempio, nel Tabella dei valori puoi specificare le righe e le colonne in cui desideri effettuare la ricerca.

Se il valore viene trovato, questo metodo restituisce l'indice o la stringa specificata. Se il valore non viene trovato, viene restituito un valore di tipo Non definito. In relazione a un Array, restituisce Indice o valore Non definito.

Esempio di utilizzo: NostraVariabile = NostraArray.Find(8);

Le collezioni universali possono essere liquidate molto rapidamente, ad es. rimuovere assolutamente tutti gli elementi. A questo scopo viene utilizzato il metodo Chiaro(), che rimuove gli elementi dell'array, le righe Tabelle dei valori o dati provenienti da altre raccolte.

Metodi aggiuntivi per Array

Metodo BOrdine() restituisce il numero di elementi meno uno. Quelli. se usiamo un loop Per, quindi al posto del metodo Quantità possiamo utilizzare immediatamente il metodo Confine().

In particolare la variabile QuantitàInArray potrebbe essere definita diversamente:

QuantitàInArray = OurArray.InBorder();
Quindi, quando si descrive il ciclo stesso, non bisogna sottrarre nessuno a questa variabile.

Il metodo Set consente di assegnare un valore a un elemento Array in base all'indice.

Sintassi: Installare(,)

Esempio: OurArray.Set(2,8);

Opzione alternativa: OurArray = 8;

È possibile utilizzare il metodo per un Array Ottenere, per leggere un valore in un indice senza ricorrere all'uso delle parentesi quadre.

Sintassi: Ottenere()

Esempio: NostraVariabile = NostroArray.Get(2);

Opzione alternativa: NostraVariabile = NostroArray;

Struttura della collezione universale

Una struttura, come un array, può avere un numero illimitato di elementi, ma il contenuto dell'elemento è diverso dall'array.

La struttura è una raccolta, ciascun valore è costituito da una coppia. Viene chiamato il primo elemento della coppia Chiave. Il secondo elemento della coppia è Senso.

Chiaveè un tipo di dati strettamente stringa che descrive un valore. Per esempio, Alla chiave"Codice" può corrispondere al valore 113; Alla chiave"Nome" significa "Vasya". Il valore stesso non è soggetto a restrizioni sul tipo di dati.

La struttura è molto comoda da usare se vogliamo creare un certo elenco di parametri. Se questo Struttura chiamato La NostraStruttura, allora faremo riferimento ai suoi due valori come segue: OurStructure.Code e OurStructure.Name.

Questo tipo di accesso è molto più conveniente che se definissimo tutti i parametri in un Array e vi accedessimo tramite indice.

La struttura rende leggibile (comprensibile) il codice del programma. La struttura viene utilizzata abbastanza spesso, molto più spesso di Array.

Viene utilizzato per descrivere determinati parametri, che spesso sono numerosi in tutti gli algoritmi.

Inoltre, la Struttura viene utilizzata se la procedura e la funzione contengono un numero elevato di parametri passati.

Quindi è molto più conveniente scrivere tutti i parametri nella Struttura e trasmetterli. Quelli. i parametri delle procedure e delle funzioni sono “impacchettati”.

Separatamente, va notato che come Chiave Nella Struttura non può assolutamente apparire alcuna linea. Si applicano alcune restrizioni.

Chiave dovrebbe fungere da identificatore. Ciò significa che dentro Klyuche non devono esserci spazi e non può iniziare con un numero.

Inizio accettabile Chiave con una lettera o un carattere di sottolineatura. Così, Chiave deve soddisfare i requisiti per la creazione di identificatori.

Notiamo in che altro modo una struttura differisce da un array. C'è un metodo nella Struttura Inserire, esistono due metodi per l'inserimento nell'Array: Inserire(ad una certa posizione) e Aggiungere(fino alla fine dell'elenco). In un Array tutti gli elementi sono ordinati.

La struttura è una sorta di insieme disordinato. Questo è il motivo per cui esiste solo un metodo di inserimento per una struttura.

Il valore viene inserito non in una posizione specifica, ma nel set specificato. Non è possibile accedere a una struttura tramite indice, come altre raccolte generiche.

È possibile accedere agli elementi della struttura solo tramite il nome della chiave. Tuttavia, il ciclo For Each funziona anche per la Struttura, ma non dovresti fare affidamento sull'ordine degli elementi della Struttura.

Una struttura viene creata allo stesso modo di altre raccolte generiche utilizzando il costruttore New, specificando il tipo di dati Struttura.

Come un array, il costruttore di una struttura può avere parametri. Quelli. è possibile descrivere il contenuto stesso di una struttura utilizzando un costruttore.

A differenza di un Array, dove puoi semplicemente specificare il numero di elementi per tutte le dimensioni, in una Struttura puoi specificare il contenuto stesso.

Per esempio: La NostraStruttura = Nuova Struttura (“Codice, Nome”, 133, “Vasya”);

Separati da virgole, vengono prima elencati i nomi delle chiavi e poi, di conseguenza, nella stessa sequenza, i valori dei parametri.

Esiste un metodo per aggiungere un nuovo valore alla struttura Inserire, che inserisce una nuova coppia (Chiave e Valore).

Per esempio: NostraStruttura.Insert(“MembriFamiglia”,3);

La Struttura è caratterizzata da un altro metodo che viene utilizzato abbastanza spesso. Questo è il metodo Proprietà.

Usando questo metodo, puoi capire se c'è un elemento in questa Struttura la cui Chiave ha questo o quel nome.

Se tale elemento esiste, il sistema restituirà il valore True, altrimenti – False.

Ad esempio, l'espressione OurStructure.Property (“Membri della famiglia”) sarà uguale al valore True. Questo metodo viene utilizzato abbastanza spesso quando si analizza la struttura.

Come per ogni collezione universale, è possibile accedere alle proprietà di una Struttura tramite indice. Ma l'indice per la Struttura è un valore stringa.

Per esempio: Report(La NostraStruttura["Membri della Famiglia"]);

Tuttavia, non dobbiamo dimenticare che una Struttura è un insieme non ordinato di oggetti, motivo per cui l'accesso tramite l'indice 0, 1, 2 non è accettabile.

Raccolta generica Elenco di valori

ElencoValoriè un elenco lineare di elementi di qualsiasi tipo di dati.

Ogni elemento è costituito da diversi valori. Schematicamente una lista di valori può essere rappresentata come una lista con quattro colonne.

Prima colonna - Segno. Ha un tipo di dati booleano e consente all'utente di selezionare o deselezionare le caselle.

L'altra colonna è un'immagine che può in qualche modo rappresentare visivamente questo elemento, ad es. abbina questa stringa a un'immagine.

La terza colonna è il valore memorizzato stesso, ad es. si tratta di qualsiasi tipo di dato e può essere diverso in righe diverse.

La quarta colonna è la presentazione, cioè questo è un tipo di stringa descrittiva di un dato valore. La vista verrà mostrata all'utente quando visualizza questo elemento. In questo caso, se la rappresentazione non viene specificata, il sistema tenterà di ottenere rappresentazioni per l'elemento contenuto in questa posizione.

ElencoValori– questo è l'oggetto con cui l'utente può lavorare visivamente. Quelli. ElencoValori possono essere visualizzati nel modulo.

L'utente può eseguire alcune azioni con esso. Oltretutto, ElencoValori può essere dedotto in modo indipendente utilizzando metodi, ad es. mostrare sullo schermo in qualche ramo dell'algoritmo (ad eccezione del codice del server) in modo che l'utente selezioni qualche riga o controlli alcune caselle.

Lo troveremo ElencoValori nell'assistente sitax. Costruttore ElencoValori non parametrizzato (non è possibile impostare alcun valore predefinito).

Esistono metodi come:

  • Inserisci(,) ;
  • Aggiungere(,);
  • Quantità();
  • Indice().

Esistono anche metodi speciali, ad esempio ScaricaValori(). Questo crea un Array in cui viene copiato l'elenco dei valori. Per esempio:

Matrice di elementi = Elenco di PriceTypes.OutloadValues();

Esiste anche un metodo inverso:
ListPriceTypes.LoadValues(ArrayItems);

Esistono metodi di ricerca:
TrovaPerValore(); TrovaPerIdentificatore().

Esiste un metodo di copia:
ListCopy = PriceTypeList.Copy();
Questo metodo ha lo scopo di apportare qualche tipo di modifica alla copia.

Esistono metodi:
Ordina per valore();
Ordina per vista().

Metodi Scegliere oggetto(,) E SegnaArticoli() richiama una finestra di dialogo modale che interrompe l'esecuzione dell'algoritmo finché l'utente non chiude la finestra.

Per utilizzare questi metodi nelle proprietà di configurazione Modalità di utilizzo deve essere impostato su Utilizzo.

Codice di esempio chiamato da un modulo di applicazione gestita:

Visualizza questo codice in modalità utente (finestra di dialogo modale).

Sotto ElencoValori utilizzato come tipo di dati disponibile per gli attributi del modulo. Creiamo un nuovo attributo per il modulo di elaborazione e ne definiamo il tipo ElencoValori e visualizzarlo nel modulo.

Creazione di una nuova squadra Compila Regali, trasferiscilo nel modulo e definisci un gestore di azioni per esso.

In modalità utente, quando fai clic sul pulsante Compila regali nel modulo di elaborazione, verrà visualizzato un elenco completato.

Se lo si desidera, l'elenco può essere modificato: alcuni elementi possono essere aggiunti, altri possono essere rimossi.

Conformità della collezione versatile

Questa raccolta è molto simile a Struttura. Proprio come la Struttura, i Mapping sono insiemi di valori costituiti da una chiave e dal valore stesso.

La differenza principale è che qualsiasi tipo di dati può essere specificato come chiave, oltre che per il valore. Tenuto conto di questa funzionalità è necessario accedere al valore di corrispondenza tramite indice; il valore della chiave è indicato come valore indice.

La chiave può essere un tipo di dati diverso da una stringa. Le proprietà e i metodi di lavoro con Compliance sono quasi gli stessi di quelli di Structure.

Il Costruttore di conformità, a differenza della Struttura, non contiene la possibilità di specificare parametri.

Esempio di utilizzo:

La corrispondenza è comoda da usare quando è necessario connettere due strutture qualsiasi. Ad esempio, ogni riga nella sezione tabella deve essere abbinata a una riga della tabella dei valori.
In questo caso la riga della sezione della tabella viene utilizzata come chiave di corrispondenza e viene indicato il valore corrispondente.

Quando si inseriscono elementi in una raccolta Match oltre al metodo Inserire(,) Un altro modo per inserire un valore è utilizzare l'operatore di assegnazione regolare.

Per esempio: La nostra partita = Nuova partita;
Corrispondenza = 999;

Quelli. se un elemento non era presente nella collezione verrà aggiunto tramite l'operatore di assegnazione e se era presente verrà aggiornato.

Questo è in contrasto con la Struttura.

Tavola dei valori della collezione universale

Tabella dei valoriè una tabella con un numero arbitrario di righe e un numero arbitrario di colonne. L'intersezione può memorizzare valori di qualsiasi tipo di dati. Se necessario, è possibile digitare le colonne, ovvero è possibile determinare in quale colonna quale tipo di dati viene memorizzato.

Puoi lasciare le colonne non tipizzate, quindi i valori possono essere archiviati in una colonna in righe diverse tipi diversi.

Differenze Tabelle dei valori da un Array bidimensionale:

  • si tratta di un oggetto con cui l'utente può lavorare (la tabella dei valori può essere visualizzata sullo schermo, l'utente può compilarla e poi leggere i dati inseriti);
  • creazione di indici per una ricerca rapida;
  • clonazione, riempimento di un'intera colonna con un determinato valore, caricamento di tutte le colonne in un array.

Tabella dei valori utilizzato come una sorta di buffer di archiviazione delle informazioni. Tabella dei valori viene restituito e accettato come parametro da molti metodi di sistema. È possibile creare una query sulla tabella dei valori.

COSÌ, Tabella dei valoriè costituito da un insieme di righe e da un insieme di colonne. Sia le righe che le colonne sono raccolte.

Quelli. all'interno della collezione Tabella dei valori ci sono altre due raccolte. Passiamo all'assistente di sintassi e troviamo Tabella dei valori.

Tipi di dati supportati: se stesso Tabella dei valori, che consiste di stringhe. Ogni riga è rappresentata da un tipo di dati RowTableValues, che ha le sue proprietà e i suoi metodi. Disponibile Raccolta di valori di colonna della tabella ha anche alcune proprietà.

Punto importante! La procedura che crea Tabella dei valori, deve compilare &OnServer.

Prima di iniziare a lavorare con Tabella dei valori, è necessario determinare quali colonne conterrà (ovvero crearle). Sintassi:

Aggiungere(,)
(opzionale)
Tipo: corda.
(opzionale)
Tipo: DescrizioneTipi
(opzionale)
Tipo: corda.
(opzionale)
Tipo: numero.

Per esempio:

Per richiamare questa procedura utilizzeremo il comando.

Nella descrizione Tabelle dei valori gli elementi della collezione sono appunto RowsTableValues.

A differenza delle colonne, costituite solo da proprietà (Nome, Tipo, Intestazione, Larghezza), in RowTableValues Esistono sia proprietà (accesso tramite nome di colonna) che metodi (puoi ottenere e impostare un valore, lavorare con i proprietari).

Per aggiungere una nuova riga alla tabella è necessario utilizzare anche il metodo Aggiungere(), O Inserire(). Nel secondo caso, è necessario indicare in quale posizione deve essere posizionata la linea richiesta.

Per assegnare un valore a una colonna, utilizziamo un punto per accedere al nome o all'indice della colonna (utilizzando parentesi quadre).

Da riempire Tabelle dei valoriÈ possibile utilizzare i seguenti metodi:

Chiaro()– da cui rimuovere tutte le righe Tabelle dei valori.

Valori di riempimento(,)– consente di riempire tutte le colonne o le colonne selezionate con un valore.
Caricacolonna(,)– carica una colonna dall'array.
ScaricaColonna()– scarica la colonna in un array.

Gli ultimi due metodi sono convenienti da utilizzare quando è necessario trasferire una colonna da una tabella di valori a un'altra.

Copia(,)– consente di crearne una nuova basata su una tabella esistente Tabella dei valori e non tutte le righe e tutte le colonne, ma solo alcune di esse. Valore di ritorno - Tabella dei valori.

Puoi copiare la struttura Tabelle dei valori. Esiste un metodo corrispondente per questo Copiacolonne(). Ne prenderemo uno vuoto Tabella dei valori con la struttura richiesta.

IN Tabella dei valori c'è un metodo Totale(). È possibile specificare la colonna in cui si desidera sommare i valori numerici. In relazione al codice precedentemente mostrato nel Tableau, puoi calcolare il valore: TK.Totale (“Importo”).

IN Tabella dei valoriè possibile raggruppare (comprimere) valori numerici per valori identici di determinate colonne utilizzando il metodo Crollo(,).

In relazione al codice precedentemente mostrato nel Tableau, puoi calcolare il valore: TK.Collapse("Giorno della settimana", "Importo").

Tabella dei valori può essere mostrato su schermata utente in modo da poter eseguire qualsiasi azione con esso. Ma diversamente ElencoValori Non puoi semplicemente richiamare una tabella sullo schermo dal codice del programma.

Da visualizzare Tabella dei valori sullo schermo, creare un attributo del modulo e assegnargli un tipo di dati Tabella dei valori.

Successivamente, la tabella risultante dovrebbe essere visualizzata nel modulo.

Nel modulo del modulo alla fine dell'algoritmo precedentemente compilato (nella Procedura per creare una tabella di valori), dovresti aggiungere:
ValoreInFormData(TK, Tabella);

Collezione universale Albero dei valori

una collezione universale che è molto simile a Tabella dei valori. La differenza rispetto ad una tabella è che le righe dell'albero possono essere subordinate l'una all'altra, cioè si può formare una sorta di gerarchia.

Questo può anche riflettersi sullo schermo. Un albero dei valori è costituito esplicitamente da una raccolta di righe e da una raccolta di colonne. Nell'albero sono presenti due proprietà: Righe e Colonne.

Poiché le righe possono essere subordinate l'una all'altra, ogni riga può avere un genitore, così come le sue righe subordinate.

Creiamo il comando Tree corrispondente e la sua procedura di elaborazione.

Creiamo in cui sono presenti una riga madre e due righe subordinate.

Creiamo gli attributi del modulo DerZn(tipo di dati – Albero dei valori).

Per questo attributo creeremo le colonne Anno e Mese.

Sposta l'elemento corrispondente DerZn sul modulo.

Alla fine Procedure TreeOnServer() aggiungiamo:

DatiValoreInForma(AlberoZn, DerZn);

Controlliamo cosa è successo in modalità utente.

Utilizzando un pulsante Aggiungere puoi aggiungere nuove righe. Possono anche formare una gerarchia.

Per attraversare tutti gli elementi dell'albero dei valori, dovremo utilizzare la ricorsione, ovvero richiamare una procedura da se stesso. Ad esempio, l'elaborazione di un albero dei valori potrebbe assomigliare a questa:

Questo conclude la nostra prima conoscenza con le collezioni universali.

Nel prossimo articolo vedremo quale importante meccanismo può utilizzare uno sviluppatore per semplificare l'accesso a un elemento della directory dal codice del programma.

Sintassi completa (clicca per espandere)

ElencoValori

Descrizione:

Un elenco di valori è un oggetto che non viene salvato nel database, che consente di creare insiemi dinamici di valori per risolvere problemi di interfaccia e manipolarli (aggiungere, modificare, eliminare elementi, ordinare). Può essere riempito con valori di qualsiasi tipo, ad es. In un elenco, i tipi di valori memorizzati possono essere diversi. Un esempio di utilizzo di questo oggetto è organizzare la selezione di un documento specifico da un elenco di possibili documenti generati utilizzando un algoritmo complesso.

Articoli da collezione: ElementoListaValori

È possibile che un oggetto ignori la raccolta utilizzando l'operatore Per ogni... Da... Ciclo. L'attraversamento seleziona gli elementi della collezione.

È possibile accedere ad un elemento di raccolta utilizzando l'operatore [...]. L'indice dell'elemento viene passato come argomento ( numerazione da 0).

Proprietà:

Metodi:

Inserisci (Indice, Valore, Rappresentazione, Etichetta, Immagine) Inserisce un nuovo elemento nell'elenco dei valori nella posizione dell'indice specificato.SelectElement (Titolo, Elemento) Richiama una finestra per la selezione interattiva di uno degli elementi compresi nella lista dei valori. Elemento- l'elemento su cui deve essere inizialmente posizionato l'elenco dei valori durante la selezione interattiva. Se il valore del parametro non è un elemento della lista valori incluso in questo elenco, il posizionamento non avverrà.ScaricaValori()Crea un array e vi copia i valori degli elementi dell'elenco di valori.Aggiungi(Valore, Rappresentazione, Etichetta, Immagine)Aggiunge un nuovo elemento alla fine dell'elenco di valori.Carica valori(ArrayValues)Carica un elenco di valori con i valori dell'array passato. In questo caso, tutti gli elementi precedenti dell'elenco vengono cancellati.Compila le note(Segno) Imposta un segno per tutti gli elementi dell'elenco di valori.Index(Element)Ottiene l'indice di un elemento in un elenco di valori. Se non viene trovato, viene restituito -1.Count() Ottiene il numero di elementi nell'elenco di valori.Trova per valore(SearchValue) Cerca il valore di un elemento in un elenco di valori. Se nessun elemento memorizza un valore uguale al valore di ricerca, viene restituito il valore Non definito. Trova per ID(Identificatore) Recupera l'elenco dei valori dell'elemento per identificatore. Se l'elemento non viene trovato, viene restituito Non definito. MarkItems(Intestazione) Imposta o deseleziona (in modo interattivo) gli elementi nell'elenco dei valori. ritorna VERO, se nella finestra di dialogo viene premuto il pulsante "OK", Menzogna- Altrimenti.Clear() Cancella l'elenco dei valori, rimuovendone tutti gli elementi.Mostra selezione elemento(DescriptionNotificationsOnClosing, Title, Element) Richiama una finestra per la selezione interattiva di uno degli elementi compresi nella lista dei valori.Mostra elementi Contrassegna(Descrizione degli avvisi di chiusura, intestazione) Progettato per impostare in modo interattivo gli stati dei contrassegni per gli elementi dell'elenco di valori.Get(Indice) Recupera il valore in base all'indice. Funziona in modo simile all'operatore.Shift (Elemento, Offset) Sposta un elemento dell'elenco di valori in avanti o indietro di un numero specificato di posizioni.Copy() Crea una copia di un elenco di valori.Ordina per valore(Direzione) Ordina un elenco di valori in ordine crescente o decrescente dei valori memorizzati dagli elementi. Vedi l'esempio qui sotto.Ordina per visualizzazione(Direzione) Ordina la lista dei valori in ordine crescente o decrescente in ordine alfabetico delle rappresentazioni degli elementi compresi nella lista dei valori. Vedi l'esempio qui sotto.Rimuovi (Elemento) Rimuove un elemento da un elenco di valori, dove Elemento- indice dell'elemento da eliminare, oppure l'elemento stesso.

Progettisti:

Nuovo elenco di valori
&Procedura sul client EseguiCodice(comando) /// Come creare un elenco di valori in 1s 8.3, 8.2 Lista = Nuova ListaValori; /// Come aggiungere un elemento all'elenco dei valori in 1s 8.3, 8.2 // aggiungi i parametri del metodo:// - Senso // - prestazione // - segno (richiesto) // - immagine (richiesto) Elenco. Aggiungi (1980, // valore dell'elemento "L'anno della nascita di Vasya"// prestazione ) ; Elenco. Aggiungi (1985, "L'anno della nascita di Yulia") ; // i valori possono essere di diverso tipo Elenco. Add("Polina" , "Nome del bambino" ) ; /// Come inserire un elemento in un elenco di valori in 1s 8.3, 8.2 // inserisce nella posizione n. 2 (gli elementi sono numerati a partire da 0) // elemento con valore 2010 e rappresentazione // "L'anno in cui è nata la loro figlia comune" Elenco. Inserisci(2, 2010, "L'anno in cui è nata la loro figlia comune") ; /// Come bypassare gli elementi dell'elenco dei valori in 1s 8.3, 8.2 Per ogni elemento dall'elenco Rapporto loop (Elemento. Rappresentazione + ": " + String(Elemento. Valore)) ; FineCiclo; /// Come cancellare l'elenco dei valori in 1s 8.3, 8.2 Elenco. Chiaro() ; Elenco. Aggiungi("Lunedì"); Elenco. Aggiungi("Martedì"); Elenco. Aggiungi("Mercoledì" ); /// Come scoprire il numero di elementi di un elenco di valori, nonché /// ottiene un elemento della lista tramite il suo indice in 1s 8.3, 8.2 // numerazione da zero Per Indice = 0 Per elenco. Quantità() - Report 1 ciclo(Lista[Indice]) ; FineCiclo; /// Come trovare un elemento di lista in base al suo valore in 1s 8.3, 8.2 ValoreTuesday = Elenco. FindByValue("Martedì"); /// Come trovare l'indice di un elemento in una lista in 1s 8.3, 8.2 Report(List.Index(ValueTuesday)) ; // 1, poiché la numerazione inizia da zero /// Come ordinare un elenco in base ai suoi valori in 1s 8.3, 8.2 // era: lunedì, martedì, mercoledì Elenco. SortByValue(SortDirection.Descending) ; // è diventato: mercoledì, lunedì, martedì /// Come rimuovere un elemento da un elenco di valori in 1s 8.3, 8.2 // rimuove il primo elemento // parametro: elemento della lista // o indice dell'elemento// puoi fare questo elenco. Elimina(Lista[ 0 ]) ; // o giù di lì // Elenco.Delete(0); /// Come spostare un elemento di un elenco di valori in 1s 8.3, 8.2 // sposta l'elemento zero in avanti di una posizione // era: lunedì martedì Elenco. Sposta(0, 1); // è diventato: martedì lunedì /// Come fare una copia di una lista in 1s 8 ListCopy = Elenco. Copia() ; Colori = NuovaListaValori; Colori. Aggiungi("Rosso" ); Colori. Aggiungi("Verde" ); Colori. Aggiungi("Blu" ); /// Come caricare i valori dell'elenco in un array in 1s 8.3, 8.2 ArrayColors = Colori. ScaricaValori() ; /// Come caricare i valori dell'elenco da un array in 1s 8.3, 8.2 Colori. CaricaValori(ArrayColors) ; Fine della procedura /// Come effettuare una selezione non modale di un valore da un elenco /// valori in 1s 8.3, 8.2&Sulla procedura client Come creare una selezione valore non modale (comando) Colori = Nuova lista valori; Colori. Aggiungi("Rosso" ); Colori. Aggiungi("Verde" ); Colori. Aggiungi("Blu" ); // la procedura AfterSelectingElement è definita appena sotto AlertAfterElementSelection = Nuova descrizioneAvvisi( "Dopo la selezione dell'elemento", QuestoOggetto ); Colori. ShowElementSelection( NotificaDopoElementSelection, "Scegli il tuo colore preferito") ; Fine della procedura e sulla procedura client dopo la selezione dell'elemento (elemento, parametri) Esporta se elemento<>Non definito Quindi Report(Element.Value) ; Finisci se ; Fine della procedura /// Come effettuare una marcatura non modale di valori da un elenco /// valori in 1s 8.3, 8.2&Sulla procedura client Come effettuare una marcatura non modale dei valori (comando) Colori = Nuova lista dei valori; Colori. Aggiungi("Rosso" ); Colori. Aggiungi("Verde" ); Colori. Aggiungi("Blu" ); // la procedura AfterMarkingElements è definita appena sotto AlertAfterMarkingItems = Nuova descrizione Avvisi ( "Articoli post-marcatura", QuestoOggetto ); Colori. MostraElementiTag(AlertAfterTagItems, "Scegli i tuoi colori preferiti") ; Colori. RiempiNote(Vero) ; Fine della procedura e sulla procedura client dopo aver contrassegnato gli elementi (elementi, parametri) Esporta elementi If<>Non definito Quindi per ogni colore dagli elementi Ciclo se colore. Segna quindi segnala (Color.Value) ; Finisci se ; FineCiclo; Finisci se ; Fine della procedura /// Come effettuare una selezione modale di un valore da un elenco in 1s 8.3, 8.2&Sulla procedura client Come creare una ModalValueSelection(comando) Colors = New ValueList; Colori. Aggiungi("Rosso" ); Colori. Aggiungi("Verde" ); Colori. Aggiungi("Blu" ); SelezionaColore = Colori. Scegliere oggetto( "Scegli il tuo colore preferito") ; Se Seleziona Colore<>Non definito Quindi Report(SelectColor.Value) ; Finisci se ; Fine della procedura /// Come contrassegnare modalmente i valori da un elenco /// valori in 1s 8.3, 8.2&Sulla procedura client Come creare un segno modale di valori (comando) Colori = Nuovo elenco di valori; Colori. Aggiungi("Rosso" ); Colori. Aggiungi("Verde" ); Colori. Aggiungi("Blu" ); Se i colori. Contrassegna elementi( "Scegli i tuoi colori preferiti") Quindi per ciascun colore dal ciclo colore se colore. Segna quindi segnala (Color.Value) ; Finisci se ; FineCiclo; Finisci se ; // ecco come puoi impostare tutti i segni contemporaneamente // elenca su un valore specifico Colori. RiempiNote(Vero) ; Fine della procedura /// Scarica ed esegui questi esempi sul tuo computer

In questa unità faremo conoscenza con un nuovo tipo di dati del linguaggio 1C, chiamato ElencoValori.

Elenco dei valoriè un array, ma con grandi capacità. E se è così, allora è anche una raccolta di dati e puoi inserirvi una serie di numeri:

// creato un elenco di valori

List.Add(23);

Finora tutto assomiglia molto a un array, non è vero? Ma andiamo avanti. Per visualizzare ora questi numeri all'utente, scriviamo:

// scorre ogni elemento dell'elenco For Each Element From List Loop Report(Element.Value);

// visualizza il valore dell'elemento EndCycle;

Ed ecco la prima differenza. Gli elementi di un array regolare sono i numeri stessi. E accesso al valore corrente di un elemento Elenco otteniamo utilizzando l'opzione Senso, utilizzando la costruzione Elemento. Senso.

Diamo un'occhiata ad alcune funzionalità aggiuntive Valori.

Può ordinare

Ad esempio, possiamo facilmente ordinare un elenco di valori. L'elenco può farlo da solo:

List.SortByValue(SortDirection.Age); Nel caso di un array regolare dovremmo implementare uno degli algoritmi di ordinamento (ad esempio "bolla").

Può cercare

L'elenco dei valori può cercare da solo i suoi elementi. Diciamo che vogliamo scoprire se un numero inserito dall'utente è presente nella nostra lista:

InserisciNumero(Numero); // ha inserito un numero dall'utente FoundElement = List. TrovaPerValore(Numero);

If FoundItem = Unfined Then OpenValue("Numero " + Numero + " non trovato nell'elenco!"); Altrimenti

OpenValue("Number " + Number + " è nell'elenco. Eccolo:" + FoundElement.Value);

finisci se; ElencoValori

Supporta l'inserimento e l'eliminazione

Un elenco di valori, come un array, supporta l'inserimento e la rimozione di elementi:

Elenco. Inserisci(0, 1000);

// inserisce mille all'inizio della lista List.Delete(O); // e rimuoverlo immediatamente dall'elenco List. Inserisci(Lista.Quantità(), 13);

// inserisce 13 alla fine della lista Report(List[List.Quantity() - 1]);

// visualizza l'ultimo elemento della lista (13)

Supporta le parentesi quadre

Come hai già capito, anche la numerazione degli elementi della lista inizia da zero e possiamo accedere a qualsiasi elemento tramite il suo indice utilizzando parentesi quadre:

Rapporto(Valore.Lista); // visualizza il secondo elemento della lista Quindi, possiamo esaminare tutti gli elementi della lista in questo modo:

For A = 0 Per List.Quantity() - 1 Loop Report(List[A].Value);

FineCiclo;

Può creare una copia di se stesso

L'elenco dei valori ha una caratteristica eccezionale: può creare una copia di se stesso:

ListaCopia = Lista.Copia();

// ha fatto una copia della lista // ora possiamo tranquillamente cambiare la Copia della Lista // mentre la lista originale non cambierà la Copia della Lista. Valore = 123456;

Può trasformarsi in un array

Infine, puoi facilmente inserire tutti gli elementi dell'elenco in un array in qualsiasi momento:

ArrayNumbers = Elenco. ScaricaValori();

// scaricato in un array

Per A = 0 per ArrayNumber.Quantity() - 1 ciclo

Rapporto(NumeriArray[A]); // non è necessario specificare // il valore dell'opzione

FineCiclo;

Per esercitarsi e consolidare il materiale di questa unità, si consiglia di completare la seguente attività.

È necessario inserire 5 numeri dall'utente, trovare il più grande e il più piccolo e mostrarli all'utente. La soluzione deve utilizzare un elenco di valori.

Soluzione

Lista = Nuova ListaValori;

// creato un elenco di valori For A = da 1 a 5 Cycle Number = 0;

InserisciNumero(Numero); // inserisci un numero dall'utente List.Add(Number); // e lo aggiungo alla lista EndCycle; // e così via 5 volte

// ordina l'elenco dei numeri

Elenco. Ordina per valore (Direzione ordinamento. Età);

// dopo l'ordinamento, il primo elemento dell'elenco è // l'elemento più piccolo e l'ultimo è l'elemento più grande OpenValue("Elemento più piccolo" + List +

", e il più grande " + List[List.Quantity() - 1]);




Superiore