Casa / Tutorial Windows / 1s riempiono la colonna della tabella dei valori. Quali metodi esistono e come cercare più valori contemporaneamente

1s riempiono la colonna della tabella dei valori. Quali metodi esistono e come cercare più valori contemporaneamente

Per tenere conto di denaro e beni, negli affari sono ampiamente utilizzate diverse tabelle. Quasi ogni documento è una tabella.

Una tabella elenca le merci da spedire dal magazzino. In un'altra tabella: l'obbligo di pagare per questi beni.

Pertanto, in 1C, il lavoro con i tavoli occupa un posto di rilievo.

Le tabelle in 1C sono anche chiamate "parti della tabella". Libri di riferimento, documenti e altri li hanno.

La query restituisce una tabella come risultato della sua esecuzione, a cui è possibile accedere in due modi diversi.

La prima - più veloce - selezione, ottenendo righe da essa è possibile solo in ordine. Il secondo è scaricare il risultato della query in una tabella di valori e quindi accedervi in ​​modo casuale.

//Opzione 1 - accesso sequenziale ai risultati della query

// ottieni la tabella
Selezione = Query.Execute().Select();
// bypassa tutte le righe del risultato della query in ordine
Mentre Selection.Next() Loop
Report(Selezione.Nome);
Fine Ciclo;

//Opzione 2 - caricamento nella tabella dei valori
Query = New Query("SELECT Name FROM Directory.Nomenclature");
// ottieni la tabella
Tabella = Query.Execute().Upload().
// quindi possiamo anche bypassare tutte le righe
Per ogni riga dal ciclo della tabella
Rapporto(Stringa.Nome);
Fine Ciclo;
//o accede arbitrariamente alle stringhe
String = Table.Find("Pala", "Nome");

Una caratteristica importante è che nella tabella, che si ottiene dal risultato della query, tutte le colonne saranno fortemente tipizzate. Ciò significa che richiedendo il campo Nome dalla ricerca Nomenclatura, riceverai una colonna di tipo String con una lunghezza consentita non superiore a N caratteri.

Tabella sul modulo (thick client)

L'utente lavora con la tabella quando viene inserita nel form.

Abbiamo discusso i principi di base del lavoro con le forme nella lezione su e nella lezione su

Quindi, posizioniamo la tabella sul modulo. Per fare ciò, puoi trascinare la tabella dal pannello di controllo. Allo stesso modo, puoi selezionare il controllo Modulo/Inserisci dal menu.

I dati possono essere memorizzati in una configurazione, quindi è necessario selezionare una parte tabulare esistente (aggiunta in precedenza) dell'oggetto di configurazione di cui si sta modificando il modulo.

Fare clic sul pulsante "..." nella proprietà Dati. Per visualizzare l'elenco delle parti tabulari, è necessario espandere il ramo Oggetto.

Quando si sceglie una parte tabulare, 1C stesso aggiungerà colonne alla tabella sul modulo. Le stringhe inserite dall'utente in tale tabella verranno salvate automaticamente insieme alla directory/documento.

Nella stessa proprietà Data è possibile immettere un nome arbitrario e selezionare il tipo ValueTable.

Ciò significa che è stata selezionata una tabella arbitraria di valori. Non aggiungerà automaticamente colonne, non verrà salvato automaticamente, ma puoi fare quello che vuoi con esso.

Facendo clic con il tasto destro sulla tabella è possibile aggiungere una colonna. Nelle proprietà della colonna è possibile specificarne il nome (per riferimento nel codice 1C), l'intestazione della colonna sul modulo, la connessione con l'attributo della parte tabulare (quest'ultima - se non è selezionata una tabella arbitraria, ma una parte tabellare).

Nelle proprietà della tabella sul modulo, è possibile specificare se l'utente può aggiungere/eliminare righe. Una forma più avanzata è la casella di controllo ViewOnly. Queste proprietà sono utili per organizzare le tabelle destinate alla visualizzazione delle informazioni, ma non alla modifica.

Per gestire la tabella è necessario visualizzare il pannello dei comandi sulla videata. Selezionare la voce di menu Form/Inserisci Control/Command Panel.

Nelle proprietà della barra dei comandi, seleziona la casella di controllo Completamento automatico in modo che i pulsanti sulla barra degli strumenti appaiano automaticamente.

Tabella sul modulo (client sottile/gestito)

In un modulo gestito, queste azioni hanno un aspetto leggermente diverso. Se è necessario posizionare una sezione tabulare nel modulo, espandere il ramo Oggetto e trascinare una delle sezioni tabulari a sinistra. E questo è tutto!

Se devi inserire una tabella di valori, aggiungi nuovi oggetti di scena form e nelle sue proprietà specifica il tipo - una tabella di valori.

Per aggiungere colonne, utilizzare il menu del tasto destro del mouse su questo attributo del modulo, voce Aggiungi colonna attributo.

Quindi trascina anche la tabella a sinistra.

Affinché la tabella abbia una barra dei comandi, nelle proprietà della tabella, selezionare i valori nella sezione Utilizzo - Posizione della barra dei comandi.

Esportare una tabella in Excel

Qualsiasi tabella 1C situata nel modulo può essere stampata o caricata in Excel.

Per fare ciò, fare clic con il tasto destro su spazio libero nella tabella e selezionare Mostra elenco.

In un (thin) client gestito, azioni simili possono essere eseguite utilizzando la voce di menu Tutte le azioni/Elenco di visualizzazione.

La tabella dei valori nella piattaforma 1C 8.3 (8.2) è una raccolta universale di valori che uno sviluppatore può utilizzare quando sviluppo software per implementare i loro algoritmi. In effetti, la tabella dei valori 1C è un insieme dinamico di valori che hanno colonne e colonne.

Articoli su altre raccolte universali di valori in 1C

Impara a programmare in 1C in un posto dal mio libro "Programma in 1C in 11 passaggi"

  1. Il libro è scritto in modo comprensibile e linguaggio semplice- per un principiante.
  2. Impara a capire l'architettura 1C;
  3. Inizierai a scrivere codice in linguaggio 1C;
  4. Padroneggiare le tecniche di base della programmazione;
  5. Consolidare le conoscenze acquisite con l'ausilio di un task book;

Un'ottima guida allo sviluppo in un'applicazione 1C gestita, sia per sviluppatori alle prime armi che per programmatori esperti.

  1. Linguaggio molto accessibile e comprensibile
  2. Il libro viene inviato a e-mail in Formato PDF. Può essere aperto su qualsiasi dispositivo!
  3. Comprendere l'ideologia di un'applicazione 1C gestita
  4. Scopri come sviluppare un'applicazione gestita;
  5. Impara a progettare forme gestite 1C;
  6. Sarai in grado di lavorare con gli elementi di base e necessari dei moduli gestiti
  7. La programmazione in un'applicazione gestita diventerà chiara

Codice promozionale per uno sconto del 15% - 48PVXHeYu


Se questa lezione ti ha aiutato a risolvere qualsiasi problema, ti è piaciuta o ti è stata utile, allora puoi sostenere il mio progetto trasferendo qualsiasi importo:

può essere pagato manualmente:

Yandex.Money — 410012882996301
Web Money - R955262494655

Unisciti ai miei gruppi.

Ecco un piccolo fatto per iniziare - semplici esempi lavorare con una tabella di valori:

1. Creare una tabella di valori

ValueTable = Nuova ValueTable;


2. Creare colonne della tabella dei valori:

ValueTable.Columns.Add("Nome");
ValueTable.Columns.Add("Cognome");


3. Aggiungi nuove righe utilizzando i nomi delle colonne:


NewString.Name = "Vasily";
NewRow.LastName = "Pupkin";


4. Come cercare un valore nella tabella dei valori:
È necessario trovare una riga della tabella contenente il valore desiderato.

FoundString = ValueTable.Find(LookupValue);


5. Trova la prima occorrenza in determinate colonne di una tabella di valori

FoundString = ValueTable.Find(LookupValue, "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 elemento della quale conterrà il nome della colonna come chiave e il valore cercato in questa colonna come valore. Passiamo la Search Structure come parametro al metodo FindStrings(). Di conseguenza, otteniamo le righe della tabella.
Se aggiungiamo la ricerca del valore desiderato alla struttura di ricerca, ad esempio, anche nella colonna Responsabile, quindi come risultato dell'applicazione del metodo FindRows(), otterremo tutte le righe in cui sia Employee che Responsible sono uguali al desiderato valore.

7. Come scorrere una tabella di valori in ordine casuale

Per ogni ciclo CurrentRow From ValueTable
Report(CurrentLine.Name);
Fine Ciclo;

Fai lo stesso usando gli indici:

SeniorIndex = ValueTable.Count() - 1;
Per MF = 0 per SeniorIndex Cycle
Report(ValueTable[Count].Name);
Fine Ciclo;


8. Eliminazione di una riga della tabella dei valori esistente

ValueTable.Delete(RemoveRow);

per indice

ValueTable.Delete(0);


9. Eliminazione di una colonna esistente della tabella dei valori

ValueTable.Columns.Delete(RemoveColumn);


per indice

ValueTable.Columns.Delete(0);

Bisogna tener conto che l'eliminazione di una riga (o colonna) “dal centro” della tabella dei valori comporterà un decremento di uno degli indici delle righe che erano “dopo” l'eliminazione

10. Come compilare la tabella dei valori se i nomi delle colonne sono contenuti nelle variabili?

NewRow = ValueTable.Add();
NewRow[ColumnName] = Valore;


11. Come riempire l'intera colonna della tabella dei valori con il valore desiderato?
La colonna FiscalAccounting Flag nella tabella dei valori della tabella dei valori deve essere riempita con il valore False

ValueTable.FillValue(False, "Flag contabilità fiscale");


Usiamo il metodo FillValues() per la tabella dei valori. Il primo parametro è il valore da riempire. Il secondo parametro è il nome della colonna piena.

12. Come compilare la tabella dei valori "TableRecipient" 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

TableReceiver = TableOriginal.Copy();


Opzione due: la tabella TableReceiver esiste ed è un peccato perdere le sue colonne e le restrizioni sui tipi di dati delle colonne. Ma devi inserire i dati per le colonne i cui nomi corrispondono ai nomi della tabella di origine.

Trasferimento dati parziale per colonne con nomi corrispondenti:

Per ogni riga di SourceTable dal ciclo SourceTable
FillPropertyValues(NewString, SourceTableString);
Fine Ciclo


Per ogni riga della tabella di origine, viene aggiunta una nuova riga alla tabella di destinazione e i valori vengono inseriti in quelle colonne della nuova tabella i cui nomi corrispondono ai nomi delle colonne nella tabella di origine

Se le tabelle non hanno colonne con lo stesso nome, la tabella di destinazione risulterà con tante righe con valori null quante erano 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 consentiti della colonna della tabella di destinazione, otterremo valori vuoti in tali campi.
Consideriamo il terzo caso. Nel caso di colonne con lo stesso nome, la colonna della tabella di destinazione deve essere portata in piena conformità con la colonna della tabella di origine.

Copia completa dei dati per le colonne con nomi corrispondenti

SimilarColumns = Nuovo array();

Ciclo per ogni colonna da SourceTable.Columns
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Se corrispondenteColumn<>Indefinito Allora

// Ottieni le proprietà della colonna.
Nome = Colonna.Nome;
ValueType = Colonna.ValueType;
Titolo = Colonna.Titolo;
Larghezza = Colonna.Larghezza;

// Sostituisce le colonne nella tabella di destinazione.
Index = TableReceiver.Columns.Index(CoincidentColumn);

TableReceiver.Columns.Delete(Indice);
TableReceiver.Columns.Insert(Index, Name, ValueType, Title, Width);

// Aggiunge il nome successivo delle colonne corrispondenti all'array.
Stesso nomeColumns.Add(Column.Name);

Finisci se;

Fine Ciclo;

// Passa attraverso le righe della tabella di origine.
Per ogni riga di SourceTable From SourceTable Loop

// Aggiungere nuova linea alla tabella di destinazione.
NewString = TableReceiver.Add();

// Inserisci i valori nelle celle corrispondenti.
Per ogni NameColumns Of Same NameColumns Loop
NewString[ColumnName] = SourceTableString[ColumnName];

Fine Ciclo;

Fine Ciclo;


Dovremo sostituire la colonna nella tabella di destinazione con una nuova, le cui proprietà corrisponderanno completamente alla colonna della tabella di origine.
Pertanto, se nella tabella dei destinatari viene trovata una colonna con lo stesso nome, raccogliamo in variabili tutte le proprietà per la nuova colonna. Quindi, elimina quello vecchio e crea una nuova colonna. Quindi scorriamo le righe della tabella di origine.
Nel ciclo, aggiungiamo una nuova riga alla tabella dei destinatari e apriamo un ciclo attraverso i nomi delle colonne nell'array di colonne corrispondenti.
All'interno di questo ciclo annidato, riempiamo le celle della tabella destinatario con i dati della cella della tabella sorgente.

13. Come aggiungere colonne alla tabella dei valori "Tabella dei valori" con restrizioni di tipo?

Quando aggiungi una colonna, puoi semplicemente specificarne il nome e non toccare 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.
ValueTable.Columns.Add("Oggetto");


È possibile inserire il valore del secondo parametro. È necessario passare lì una descrizione del tipo consentito per la colonna. La descrizione stessa può essere ottenuta utilizzando il costruttore, passando come parametro il nome della stringa del tipo (se ci sono molti tipi, quindi separati da virgole) o un array di tipi validi.

Aggiunta di una colonna che specifica il tipo di dati

// Restrizioni sui tipi di dati di colonna:
// Solo elementi della directory "Contractors".
ValueTable.Columns.Add("Account", New TypeDescription("ReferenceReference.Accounts"));


Se è presente una stringa tra i tipi consentiti per la compilazione dei dati della colonna, è possibile limitarne la profondità di bit (lunghezza), specificare l'uso di una lunghezza variabile o fissa. Tutto ciò viene fornito creando un oggetto utilizzando il costruttore StringQualifiers. Inoltre, questo oggetto verrà utilizzato come uno dei parametri del costruttore TypeDescription.

Utilizzo dei qualificatori per specificare il tipo di dati di una colonna della tabella dei valori

// Prepara e imposta i limiti per i dati di tipo stringa.
Qualificatori stringa = Nuovi qualificatori stringa(20, ValidLength.Variable);
AllowedTypes = NewTypeDescription("String",StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Puoi fare lo stesso per i qualificatori di numero e data.
Nota: la descrizione del tipo può essere costruita 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 della tabella dei valori

// Estensione della descrizione dei tipi precedentemente utilizzata.
Qualificatori numerici = Nuovi qualificatori numerici(10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
ExtendedValidTypes = NewTypeDescription(ValidTypes, "Numero, Data",NumberQualifiers,DateQualifiers);

ValueTable.Columns.Add("Nota", ExtendedAllowedTypes);

Cerca nella tabella dei valori 1C

Quali metodi esistono e come cercare più valori contemporaneamente.

Esistono due metodi speciali per la ricerca in una tabella di valori:

1. Trova

TVHorizon = Directories.Nomenclature.FindBy Name("Horizon TV");
FoundString = TZNomenclature.Find(TVHorizon);
//possiamo anche specificare in quali colonne cercare per velocizzare la ricerca
FoundString = TKNomenclature.Find(TVHorizon, "Nomenclature");

Questo metodo restituisce la prima stringa trovata con il valore che stai cercando, oppure Undefined se non lo trova. Pertanto, è conveniente usarlo per cercare valori unici, perché in caso contrario, quando si trova un valore, sarà necessario eliminarlo dalla tabella per trovare il successivo.

Per non soffrire così, c'è il seguente metodo, che permette di trovare un array di stringhe adatte:

2. Trova stringhe


Selezione Struttura.Insert("Nomenclatura", TVHorizon); // prima specifichiamo 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 stessi 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, si modificherà il valore nella tabella dei valori elaborata.

Cos'altro c'è di buono in questo metodo è che può cercare più colonne della tabella dei valori contemporaneamente:


SelectionStructure = Nuova struttura;
Selezione Struttura.Insert("Nomenclatura", TVHorizon);
Struttura selezione.Insert("Quantità", 10);
FoundStringArray = TKNomenclature.FindStrings(SelectionStructure);

L'unico aspetto negativo, come puoi vedere, non puoi usare altri tipi di confronto diversi da "uguale"

Una tabella di valori è un oggetto generico specifico progettato per archiviare i dati in una vista tabella. La differenza fondamentale tra una tabella e gli oggetti dell'applicazione è che non è collegata alle tabelle fisiche del database. La tabella dei valori esiste solo in memoria ad accesso casuale, che da un lato dà opportunità uniche D'altra parte, impone alcune restrizioni. Tuttavia, le possibilità di interazione con una tabella sono paragonabili all'interazione con oggetti che esistono effettivamente nel database.

Storicamente, la tabella dei valori in 1C ha un duplice scopo, essendo un analogo virtuale delle tabelle esistenti, ma allo stesso tempo un elemento di controllo. Con il passaggio a un'applicazione gestita, la maggior parte di questa funzionalità è stata deprecata, ma anche adesso può essere anche un elemento dell'interfaccia utente, ma con una serie di limitazioni significative.

Struttura della tavola dei valori come oggetto

Le proprietà di una tabella dei valori sono definite dalla combinazione di due raccolte predefinite: le sue colonne e le sue righe.

Tabella dei valori Colonne

La colonna della tabella dei valori è la sua proprietà di definizione. È l'insieme delle colonne di una tabella che ne determina la struttura. Le colonne corrispondono ai campi nelle tabelle fisiche o alle colonne dell'interfaccia utente familiare in una sezione tabulare o in un registro documenti. Una colonna può avere un nome interno, un tipo di valore e un'intestazione che viene visualizzata durante l'interazione con la tabella.

Poiché le colonne sono raccolte di oggetti, è possibile aggiungere, rimuovere e modificare colonne.

Riga della tabella dei valori

Dal punto di vista dell'interfaccia del programma, le stringhe sono una raccolta separata incorporata in una tabella di valori. Sono analoghi ai record delle tabelle fisiche, ovvero le righe di una parte tabulare o di un giornale di documenti familiari all'utente. Ogni singola riga è 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 della tabella.

Crea una tabella di valori

Esistono molti modi per ottenere una tabella di valori pronta per l'uso. Consideriamo alcuni di loro. Ogni esempio verrà fornito come elenco di codici con commenti.

Creazione di una tabella con un costruttore

Il metodo principale, che consente di creare esattamente il tipo di tabella di cui ha bisogno lo sviluppatore, è purtroppo il più dispendioso in termini di tempo, poiché richiede di specificare manualmente tutte le proprietà necessarie della tabella.

DemoTable = Nuova tabella dei valori; // Prima di tutto, inizializziamo il TK // Successivamente, definiamo i parametri necessari per le nuove colonne e li aggiungiamo alla raccolta // Creazione della colonna "Nomenclature" Name = "Nomenclature"; ValueType = New TypeDescription("ReferenceReference.Nomenclature"); Titolo = "Nomenclatura (oggetto)"; DemoTable.Columns.Add(Nome, TipoValore, Titolo); // Creazione della colonna "Amount" Name = "Amount"; ValueType = NewTypeDescription("Numero"); DemoTable.Columns.Add(Nome, TipoValore); // Come risultato di queste manipolazioni, abbiamo creato una tabella vuota con colonne tipizzate // Se è necessario utilizzare una tipizzazione più precisa dei tipi primitivi, è necessario utilizzare la sintassi estesa del costruttore "TypeDescription"

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, è necessario applicare il metodo "Copia la tabella di riferimento". Se hai a che fare con parte tabulare o un insieme di record anagrafici, è necessario utilizzare il metodo "Scarica tabella valori". Se hai solo bisogno della struttura, puoi utilizzare il metodo "CopyColumns".

// Variante con la copia di tutte le righe dallo standard TK ma con il salvataggio solo di due colonne specificate Colonne di riferimento = "Nomenclatura, quantità"; DemoTable = TableReference.Copy(, ColumnsReference); // Variante con la copia delle righe selezionate in precedenza dallo standard TK, preservando le due colonne specificate. Colonne di riferimento = "Nomenclatura, Quantità"; DemoTable = TableReference.Copy(RowsReference, ColumnsReference); // Opzione con la copia delle righe dallo standard TK in base al filtro specificato, mantenendo una colonna "Nomenclatura" // Verranno selezionate tutte le righe in cui il valore nella colonna Quantità è 0, solo la colonna Nomenclatura verrà inclusa nella tabella risultante Row Selection = New Structure("Quantity" , 0); Colonne di riferimento = "Nomenclatura"; DemoTable = TableReference.Copy(RowsReference, ColumnsReference); // Variante con copia completa della tabella e successiva cancellazione di una riga con valore del campo quantità uguale a zero e cancellazione dell'intera colonna “Number” RowSelection = New Structure("Number", 0); Colonne di riferimento = "Nomenclatura"; DemoTable = TableReference.Copy(RowsReference, ColumnsReference); TableString = DemoTable.Find(0, "Conteggio"); DemoTable.Delete(TableString); DemoTable.Columns.Delete("Quantità"); // È possibile applicare opzioni simili e le relative modifiche parti tabulari e registrare set di record

Creazione di una tabella con una query

Se il database ha 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 seguendo la struttura del registro di accumulo // È facile intuire che in questo modo si ottiene anche la tabella piena Request = New Request("SELECT FIRST 0 * From Registro di accumulo. Merce in magazzino "); QueryResult = Query.Execute(); DemoTable = QueryResult.Upload(); // Un esempio con la creazione di una tabella vuota da tipi e nomi di campo esplicitamente specificati Query = New Query; Query.Text = "SELECT FIRST 0 | Value(Catalog.Nomenclature.NullReference) AS Nomenclature, | EXPRESS(0 AS NUMBER(15, 3)) AS Quantity"; QueryResult = Query.Execute(); DemoTable = QueryResult.Upload(); // IMPORTANTE! Non dimenticare che il tipo Null è sempre presente nei tipi di valore di colonna ottenuti dalla query // Pertanto, la TM creata dalla query ha sempre tipi di colonna compositi

Conclusione

In questo breve articolo, abbiamo coperto le proprietà di base e le tecniche pratiche per creare una tabella dei valori, sufficiente per capire e iniziare a utilizzare. L'oggetto stesso della tabella dei valori è così sfaccettato che descrizione dettagliata le sue capacità richiedono di scrivere un articolo separato sulle tecniche e sui metodi di lavoro.