Una tabella valori è un oggetto generico specifico per l'archiviazione dei dati in una vista tabella. La differenza fondamentale tra tabelle e oggetti applicazione è che non sono associati a tabelle di database fisici. La tabella dei valori esiste solo nella RAM, che, da un lato, offre opportunità uniche e, dall'altro, impone alcune restrizioni. Tuttavia, la capacità di interagire con una tabella è paragonabile all'interazione con oggetti effettivamente esistenti nel database.
Storicamente, la tabella dei valori in 1C ha un duplice scopo, essendo un analogo virtuale delle tabelle esistenti, ma allo stesso tempo è anche un elemento di controllo. Con il passaggio a un'applicazione gestita, la maggior parte di questa funzionalità è stata deprecata, ma ora può anche essere un elemento dell'interfaccia utente, ma con una serie di limitazioni significative.
La struttura della tabella dei valori come oggetto
Le proprietà di una tabella di valori sono definite da combinazioni di due raccolte predefinite: le sue colonne e le sue righe.
Tabella dei valori Colonne
La colonna della tabella dei valori è la sua proprietà che lo definisce. È l'insieme delle colonne della tabella che ne determina la struttura. Le colonne corrispondono ai campi delle tabelle fisiche o alle colonne della sezione tabellare o del giornale di registrazione che sono familiari dall'interfaccia utente. Una colonna può avere un nome interno, un tipo di valore e un titolo che viene visualizzato quando si interagisce con la tabella.
Poiché le colonne sono una raccolta di oggetti, puoi aggiungere, rimuovere e modificare le colonne.
Riga della tabella dei valori
Dal punto di vista dell'interfaccia di programmazione, le stringhe sono una raccolta separata incorporata in una tabella di valori. Sono analoghi ai record delle tabelle fisiche, ovvero le righe della sezione tabulare o del giornale documentale che sono familiari all'utente. Ogni riga presa separatamente è un oggetto con un insieme di proprietà denominate, i cui nomi corrispondono ai nomi delle colonne della tabella.
Pertanto, l'interazione con una stringa è molto simile all'interazione con altri oggetti. Puoi leggere e scrivere le sue proprietà, anche usando la funzione predefinita "FillPropertyValues ()". Poiché le righe sono la raccolta principale della tabella dei valori, il metodo "Clear()" viene utilizzato per eliminare tutte le righe nella tabella.
Crea una tabella di valori
Esistono molti modi per ottenere una tabella dei valori pronta per l'uso. Diamo un'occhiata ad alcuni di loro. Ogni esempio verrà fornito come elenchi di codici con commenti.
Creazione di un tavolo dal designer
Il metodo principale che consente di creare solo una tabella di cui ha bisogno lo sviluppatore è, sfortunatamente, il più dispendioso in termini di tempo, poiché richiede la specifica manuale di tutte le proprietà della tabella necessarie.
DemoTable = NewValuesTable; // Prima di tutto inizializziamo il TOR // Successivamente, definiamo i parametri necessari per le nuove colonne e le aggiungiamo alla collezione // Creiamo la colonna "Nomenclatura" Name = "Nomenclatura"; ValueType = NewDescription of Types ("ReferenceLink.Nomenclature"); Titolo = "Nomenclatura (prodotto)"; DemoTable.Columns.Add (Nome, ValueType, Titolo); // Crea una colonna "Quantità" Name = "Quantità"; ValueType = NewTypeDescription ("Numero"); DemoTable.Columns.Add (Nome, ValueType); // Come risultato di queste manipolazioni, abbiamo creato una tabella vuota con colonne digitate // Se hai bisogno di usare una digitazione più precisa dei tipi primitivi, allora dovresti usare la sintassi estesa del costruttore "Descrizione dei tipi"Creare una tabella copiando
Se hai a portata di mano una referenza con struttura e/o composizione idonea, puoi copiare o scaricare la tabella dei valori di riferimento. Se il riferimento è un'altra tabella, allora è necessario applicare il metodo "Copia tabelle di riferimento". Se hai a che fare con una sezione tabellare o un insieme di record di registro, devi utilizzare il metodo "Scarica tabella dei valori". Se hai solo bisogno di una struttura, puoi utilizzare il metodo "CopyColumns".
// Possibilità di copiare tutte le righe dalla norma tecnica, ma mantenendo solo le due colonne specificate Colonne della norma = "Nomenclatura, Quantità"; DemoTable = TableDefault.Copy (, ColumnDefault); // Opzione con la copia di righe preselezionate dal modello TZ, mantenendo le due colonne specificate. ColumnsStandard = "Nomenclatura, Quantità"; DemoTable = TableDefault.Copy (RowsDefault, ColumnDefault); // Opzione con la copia di righe dallo standard TZ tramite il filtro specificato, mantenendo una colonna "Nomenclatura" // Tutte le righe verranno selezionate dove il valore nella colonna Quantità è 0, solo la colonna Nomenclatura sarà inclusa nella tabella risultante . , 0); ColumnStandard = "Nomenclatura"; DemoTable = TableDefault.Copy (RowsDefault, ColumnDefault); // Opzione con copia integrale della tabella e successiva cancellazione di una riga con valore del campo quantità uguale a zero e cancellazione dell'intera colonna “Quantità” Selezione Righe = Nuova Struttura ("Quantità", 0); ColumnStandard = "Nomenclatura"; DemoTable = TableDefault.Copy (RowsDefault, ColumnDefault); TableRow = DemoTable.Find (0, "Quantità"); DemoTable.Delete (TableRow); DemoTable.Columns.Remove ("Quantità"); // Opzioni simili e le loro modifiche possono essere applicate a sezioni di tabelle e recordset di registriCreazione di una tabella con una query
Se il database contiene un modello per la tabella di cui hai bisogno, puoi utilizzare una query per creare rapidamente una tabella con la struttura desiderata.
// Un esempio di creazione di una tabella vuota basata sulla struttura del registro di accumulazione // Non è difficile intuire che in questo modo si può ottenere una tabella piena Query = New Query ("SELEZIONARE IL PRIMO 0 * From Accumulation Register. Prodotti in Store"); QueryResult = Query.Run (); DemoTable = QueryResult.Upload (); // Un esempio di creazione di una tabella vuota per tipi e nomi di campi specificati in modo esplicito Query = New Query; Query.Text = "SELECT FIRST 0 | Value (Directory.Nomenclature.EmptyLink) AS Nomenclature, | EXPRESS (0 AS NUMBER (15, 3)) AS Quantity"; QueryResult = Query.Run (); DemoTable = QueryResult.Upload (); // IMPORTANTE! Non dimenticare che i tipi di valori di colonna ottenuti da una query contengono sempre il tipo Null // Pertanto, l'assegnazione tecnica creata da una query ha sempre tipi di colonna compositiConclusione
In questo breve articolo, abbiamo trattato le proprietà di base e le migliori pratiche per la creazione di una tabella dei valori, sufficienti per iniziare e capire. Lo stesso oggetto della tabella dei valori è così multiforme che una descrizione dettagliata delle sue capacità richiede la scrittura di un articolo separato su tecniche e metodi di lavoro.
La tabella dei valori nella piattaforma 1C 8.3 (8.2) è una raccolta universale di valori che uno sviluppatore può utilizzare nello sviluppo del software per implementare i propri algoritmi. In effetti, una tabella di valori 1C è un insieme dinamico di valori che hanno colonne e colonne.
Articoli su altre raccolte universali di valori in 1C
Impara la programmazione in 1C in atto dal mio libro "Programma in 1C in 11 passaggi"
- Il libro è scritto in un linguaggio chiaro e semplice - per un principiante.
- Impara a comprendere l'architettura di 1C;
- Inizierai a scrivere codice nel linguaggio 1C;
- Padroneggiare le tecniche di programmazione di base;
- Rafforzare le conoscenze acquisite con l'aiuto di un libro di problemi;
Un'eccellente guida allo sviluppo in un'applicazione 1C gestita, sia per sviluppatori principianti che per programmatori esperti.
- Linguaggio di presentazione molto accessibile e comprensibile
- Il libro viene inviato via e-mail in formato PDF. Può essere aperto su qualsiasi dispositivo!
- Comprendere l'ideologia di un'applicazione gestita 1C
- Scopri come sviluppare un'applicazione gestita;
- Impara a sviluppare forme 1C controllate;
- Sarai in grado di lavorare con gli elementi principali e necessari dei moduli gestiti
- La programmazione nell'applicazione gestita diventerà chiara
Codice promozionale per uno sconto del 15% - 48PVXHeYu
Se questa lezione ti ha aiutato a risolvere qualche problema, ti è piaciuta o si è rivelata utile, allora puoi sostenere il mio progetto trasferendo qualsiasi importo:
puoi pagare manualmente:
Yandex.Money - 410012882996301
Web Money - R955262494655
Unisciti ai miei gruppi.
Cerca nella tabella i valori 1C
Quali metodi esistono e come cercare contemporaneamente più valori.
Esistono due metodi speciali per cercare i valori in una tabella:
1. Trova
Horizon TV = Libri di riferimento.Nomenclature.FindByName ("Horizon TV");FoundString = TKNomenclature.Find (TV Horizon);
// possiamo anche specificare in quali colonne cercare per velocizzare la ricerca
FoundString = TKNomenclature.Find (TV Horizon, "Nomenclatura");
Questo metodo restituisce la prima stringa trovata con il valore desiderato o Undefined in caso contrario. Pertanto, è conveniente utilizzarlo per trovare valori univoci, poiché altrimenti, quando trovi un valore, rimuovilo dalla tabella per trovare quello successivo.
Per non soffrire così, c'è il seguente metodo, che ti permette di trovare un array di stringhe corrispondenti:
2. Trova le stringhe
StructureSelection.Insert ("Nomenclatura", TV Horizon); // prima specifica la colonna dove cercare e poi cosa cercare.
Questo metodo restituisce sempre un array, ma può essere vuoto se non viene trovato nulla. E questo metodo, come il precedente, restituisce le righe della tabella dei valori e non i valori stessi in un array separato. Pertanto, modificando i valori nella riga dell'array o, come nel metodo precedente, per la riga trovata, modificherai il valore nella tabella dei valori elaborata.
Un'altra cosa buona di questo metodo è che può cercare più colonne della tabella dei valori contemporaneamente:
Quadro di selezione = Nuova struttura;
StructureSelection.Insert ("Nomenclatura", TV Horizon);
Struttura della selezione Inserisci ("Quantità", 10);
FoundArrayStrings = TZNomenclature.FindStrings (SelectionStructure);
L'unico inconveniente, come puoi vedere, non puoi usare altri tipi di confronto diversi da "uguale"
Ecco un piccolo fatto per cominciare: semplici esempi di lavoro con una tabella di valori:
1. Crea una tabella di valori
ValuesTable = Nuova ValuesTable;
2. Creare colonne della tabella dei valori:
ValuesTable.Columns.Add ("Nome");
ValuesTable.Columns.Add ("Cognome");
3. Aggiungi nuove righe usando i nomi delle colonne:
NewStroka.Name = "Vasily";
NewStroka.Surname = "Pupkin";
4. Come cercare un valore in una tabella di valori:
È necessario trovare la riga della tabella contenente il valore richiesto.
FoundString = ValueTable.Find (LookupValue);
5. Trova la prima occorrenza in colonne specifiche della tabella dei valori
FoundString = ValueTable.Find (SearchValue, "Fornitore, Acquirente");
6. Se è necessario trovare tutte le occorrenze nella tabella dei valori:
Usiamo la struttura di ricerca.
SearchStructure = Struttura ("Dipendente", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings (SearchStructure);
Creiamo una struttura di ricerca, ogni cui elemento conterrà il nome di una colonna come chiave e il valore desiderato in questa colonna come valore. Passiamo SearchStructure come parametro al metodo FindStrings(). Di conseguenza, otteniamo le righe della tabella.
Se aggiungiamo una ricerca per il valore richiesto alla struttura di ricerca, ad esempio, nella colonna Responsabile, quindi come risultato dell'utilizzo del metodo FindStrings (), otteniamo tutte le righe in cui sia l'Impiegato che il Responsabile sono uguali al desiderato valore.
7. Come scorrere una tabella di valori in ordine casuale
Per ogni linea corrente dal loop della tabella dei valori
Rapporto (StringaCorrente.Nome);
Fine del ciclo;
Stessa cosa usando gli indici:
MajorIndex = ValueTable.Quantity () - 1;
Per MF = 0 al ciclo dell'indice principale
Report (TableValues [Count] .Name);
Fine del ciclo;
8. Eliminazione di una riga esistente della tabella dei valori
ValuesTable.Delete (DeletedString);
per indice
ValuesTable.Remove (0);
9. Eliminazione di una colonna esistente della tabella dei valori
ValuesTable.Columns.Remove (DeletedColumn);
per indice
ValuesTable.Columns.Remove (0);
Va tenuto presente che l'eliminazione di una riga (o colonna) "dal centro" della tabella dei valori comporterà una diminuzione di uno negli indici delle righe che erano "dopo" l'eliminazione
10. Come compilare la tabella dei valori se i nomi delle colonne sono contenuti in variabili?
NewRow = ValuesTable.Add ();
NewString [ColumnName] = Valore;
11. Come riempire l'intera colonna della tabella dei valori con il valore richiesto?
La colonna FiscalAccount Flag nella tabella dei valoriValuesTable deve essere riempita con il valore False
ValuesTable.FillValues (False, "FiscalAccounting Flag");
Applicare il metodo FillValues () alla tabella dei valori. Il primo parametro è il valore da riempire. Il secondo parametro è il nome della colonna da riempire.
12. Come riempire la tabella dei valori "RecipientTable" con i dati della tabella dei valori "SourceTable"?
Se la Tabella Destinatari non esiste ancora al momento dell'operazione o non è necessario salvare le sue colonne precedenti, è possibile crearla come copia completa dell'originale
ReceiverTable = SourceTable.Copy ();
Opzione 2: la tabella TableRecipient esiste ed è un peccato perdere le sue colonne e le restrizioni sui tipi di dati delle colonne. Ma è necessario compilare i dati per le colonne, i cui nomi coincidono con i nomi della tabella di origine.
Trasferimento dati parziale per colonne con nomi corrispondenti:
Per ogni riga SourceTable dal ciclo SourceTable
FillPropertyValues (NewRow, SourceTableRow);
Fine del ciclo
Per ogni riga della tabella di origine, viene aggiunta una nuova riga alla tabella di ricezione e i valori vengono compilati in quelle colonne della nuova tabella, i cui nomi coincidono con i nomi delle colonne nella tabella originale.
Se le tabelle non hanno colonne con gli stessi nomi, la tabella secondaria conterrà tante righe con valori vuoti quante sono le righe nella tabella di origine.
Se per alcune colonne con lo stesso nome il tipo di valore dei dati dalla tabella di origine non rientra nell'array dei tipi di colonna consentiti della tabella di ricezione, otterremo valori vuoti in tali campi.
Consideriamo il terzo caso. Nel caso di colonne omonime, la colonna della tabella ricevente deve essere resa pienamente conforme alla colonna della tabella sorgente.
Copia completa dei dati per le colonne con nomi corrispondenti
Colonne omonime = New Array ();
Per ogni colonna dalla tabella di origine. Loop colonne
MatchingColumn = TableRecipient.Columns.Find (Column.Name);
Se MatchingColumn<>Indefinito Allora
// Recupera le proprietà della colonna.
Nome = Colonna.Nome;
ValueType = Column.ValueType;
Intestazione = Colonna.Intestazione;
Larghezza = Colonna.Larghezza;
// Sostituisci le colonne nella tabella ricevente.
Indice = TableReceiver.Columns.Index (MatchingColumn);
TableReceiver.Columns.Remove (Indice);
TableReceiver.Columns.Insert (indice, nome, tipo valore, intestazione, larghezza);
// Aggiunge il nome successivo delle colonne corrispondenti all'array.
Colonne con lo stesso nome.Add (Column.Name);
Finisci se;
Fine del ciclo;
// Ciclo attraverso le righe della tabella di origine.
Per ogni riga SourceTable dal ciclo SourceTable
// Aggiunge una nuova riga alla tabella dei destinatari.
NewRow = TableRecipient.Add ();
// Inserisci i valori nelle celle corrispondenti.
Per ogni nome di colonne dal ciclo di colonne simili
NewRow [ColumnName] = SourceTableRow [ColumnName];
Fine del ciclo;
Fine del ciclo;
Dovremo sostituire la colonna nella tabella di ricezione con una nuova, le cui proprietà corrisponderanno completamente alla colonna della tabella di origine.
Pertanto, se viene trovata una colonna con lo stesso nome nella tabella dei destinatari, raccogliamo tutte le proprietà per la nuova colonna in variabili. Quindi, elimina quello vecchio e crea una nuova colonna. Quindi eseguiamo il ciclo attraverso le righe della tabella di origine.
Nel ciclo, aggiungi una nuova riga alla tabella ricevente e apri il ciclo per scorrere i nomi delle colonne nell'array di colonne corrispondenti.
All'interno di questo ciclo annidato, riempiamo le celle della tabella ricevente con i dati della cella della tabella sorgente.
13. Come aggiungere colonne alla tabella dei valori "ValuesTable" con vincoli per tipo?
Quando aggiungi una colonna, puoi semplicemente specificarne il nome e lasciare inalterato il secondo parametro del metodo Add(). In questo caso, il tipo di dati della colonna è arbitrario.
Aggiunta di una colonna senza specificare un tipo di dati
// Aggiunge una colonna senza restrizioni di tipo.
ValuesTable.Columns.Add ("Oggetto");
È possibile inserire il valore del secondo parametro. La descrizione del tipo consentito per la colonna deve essere passata lì. La descrizione stessa può essere ottenuta utilizzando il costruttore, passando quest'ultimo come parametro il nome del tipo di stringa (se ci sono molti tipi, quindi separati da virgole) o un array di tipi ammissibili.
Aggiunta di una colonna che indica il tipo di dati
// Restrizioni sui tipi di dati di colonna:
// Solo elementi della ricerca "Appaltatori".
TableValues.Columns.Add ("Controparte", Nuova descrizione dei tipi ("DirectoryLink.Contractors"));
Se c'è una stringa tra i tipi consentiti per riempire i dati della colonna, è possibile limitarne la profondità di bit (lunghezza), specificare l'uso di una lunghezza variabile o fissa. Tutto ciò si ottiene creando un oggetto utilizzando il costruttore String Qualifiers. Inoltre, questo oggetto verrà utilizzato come uno dei parametri del costruttore TypeDescription.
Utilizzo dei qualificatori per qualificare il tipo di dati di una colonna di valori della tabella
// Prepara e imposta le restrizioni per i dati di tipo String.
Qualificatori stringa = Qualificatori NewString (20, ValidLength.Variable);
AllowedTypes = NewTypeDescription ("Stringa", StringQifiers);
ValuesTable.Columns.Add ("NoteStringShort", AllowedTypes);
Puoi fare lo stesso per i qualificatori di data e data.
Nota: la descrizione del tipo può essere creata dal costruttore sia "da zero", sia puoi utilizzare una descrizione del tipo esistente come base.
Utilizzo di dichiarazioni di tipo esistenti per specificare il tipo di dati di una colonna di una tabella di valori
// Estensione della descrizione del tipo precedentemente utilizzata.
QualifiersNumber = New QualifiersNumber (10, 2, ValidSign.Non negativo);
Qualificatori di data = Nuovi qualificatori di data (DateParts.Date);
ExtendedAllowedTypes = NewTypeDescription (AllowedTypes, "Number, Date", Number Qualifiers, Date Qualifiers);
ValuesTable.Columns.Add ("Nota", ExtendedAllowedTypes);