Casa / Servizi online / 1c mostra una tabella di valori. E ora: ripetizione del materiale

1c mostra una tabella di valori. E ora: ripetizione del materiale

Probabilmente, nessun oggetto delle raccolte universali di valori è così popolare tra gli sviluppatori 1C come la tabella dei valori (TV). Gli elenchi di valori non possono essere ampliati con dettagli; l'albero dei valori è visivamente comodo da percepire, ma il progetto di leggere a livello di codice i valori delle sue righe è difficile da implementare.

E solo la tabella dei valori:

  • In grado di compilare direttamente parti tabellari di documenti, libri di consultazione ed elaborazioni;
  • È il risultato dell'esecuzione di una richiesta;
  • Facile da leggere e formulato visivamente;
  • e molti molti altri.

In questo articolo abbiamo cercato di dare un'idea generale di un oggetto così complesso e universale come una tabella di valori.

In cosa consistono le tabelle dei valori?

Tutti gli sviluppatori alle prime armi sanno chiaramente che la tabella dei valori ha:

  1. Colonne che descrivono la struttura della tabella;
  2. Righe che riempiono la tabella di informazioni.

Tuttavia, molto spesso dimentichiamo una proprietà importante della tabella: i suoi indici, vale a dire il loro utilizzo ci consente di accelerare notevolmente il processo di ricerca nella tabella, di formare selezioni al suo interno e di migliorare seriamente le prestazioni.

Ma prima le cose principali.

La Figura 1 mostra come si presenta una tabella di valori, stampata utilizzando la procedura più semplice, che ne mostra la struttura e il contenuto.

Come si può vedere dall'esempio, la tabella ha 5 colonne, senza contare il numero di riga in ordine.

Nella maggior parte dei casi non è necessario specificare il tipo di dati di una colonna e la sua larghezza; è sufficiente specificare il nome della colonna, ma in alcuni casi ciò semplicemente non può essere evitato (ad esempio, quando si carica una tabella su un file dbf).

Se in futuro si prevede di utilizzare la tabella dei valori come origine dati per una query, è necessario specificare il tipo di dati (Fig. 2).

L'aggiunta di una riga avviene tramite il metodo Add(), assegnando il nome della nuova riga.

Indici delle tabelle dei valori

La ricerca nella tabella dei valori viene effettuata utilizzando due metodi:

  • Trova (restituisce il primo elemento trovato in base a determinati parametri, altrimenti il ​​valore è Indefinito);
  • FindRows (restituisce una serie di righe di tabella che soddisfano determinate condizioni).

La ricerca in tabelle di grandi dimensioni rallenta notevolmente il sistema e può richiedere molto tempo. È in questi casi che dovrebbero essere utilizzati gli indici.

Nel primo caso la ricerca avviene utilizzando un valore e una colonna, che è quello che bisogna trasferire negli indici (Fig. 3)

Gli indici passati separati da virgole indicano che è possibile effettuare ricerche nella tabella utilizzando il metodo FindRows, al quale verrà passata come parametro una determinata struttura.

Nel caso riportato nell'esempio, la seconda riga indica la ricerca contemporanea di righe contenenti uno specifico valore di Nomenclatura e le sue caratteristiche, e la terza riga indica che tra i parametri di ricerca è possibile aggiungere il documento “Ordine di Produzione”.

Quando si lavora con vari oggetti di metadati di configurazione, nonché con report ed elaborazioni, spesso si verifica una situazione in cui è necessario eseguire alcune azioni con le loro parti tabulari. Lavorare direttamente con gli elementi del modulo o con le parti tabulari dei documenti non è sempre conveniente.

È qui che la tabella dei valori viene di nuovo in soccorso. Nelle specifiche tecniche, utilizzando il metodo delle parti tabulari Unload(), è possibile:

  1. Ripetere completamente la struttura della tabella del documento, preservando tutte le informazioni possibili;
  2. Determina solo le colonne e le righe necessarie per ulteriori lavori e visualizzale.

L'azione inversa (riempimento della parte di tabella) avviene utilizzando il metodo Load(), il cui unico parametro è il nome della tabella da visualizzare.

Si precisa che il confronto tra le colonne della parte tabellare e dell'incarico tecnico avviene per nome.

Puoi copiare completamente un TK in un altro, nonché determinare quali righe e colonne verranno trasferite utilizzando il metodo Copy().

Fig.4

In questo caso, le colonne della tabella verranno preservate e le informazioni e le righe del duplicato verranno eliminate.

Tabella dei valori e query

Come accennato in precedenza, il risultato dell'esecuzione della query viene caricato nelle specifiche tecniche, ma molto spesso gli sviluppatori hanno una domanda: come elaborare una tabella di valori con una query, è possibile e quale codice aiuta a farlo.

La tecnologia di query in 1C non implica l'uso di specifiche tecniche come fonti di dati, ma questa limitazione può essere facilmente aggirata utilizzando. Il codice nella Figura 5 mostra come eseguire questa operazione.

Fig.5

Sostituendo "*" con i nomi delle colonne (una riga del modulo TZ.Nomenclature), è possibile ridurre la quantità di informazioni caricate.

Un errore durante l'esecuzione di una richiesta (Fig. 5) "Il tipo non può essere elaborato nella richiesta" indica che lo sviluppatore ha dimenticato di eseguire parte del codice in Fig. 2 e non ha digitato le colonne.

Tabella dei valori e cicli

Quando si scorre le righe di una tabella di valori utilizzando un metodo contenente un contatore (Fig. 6), è importante ricordare che il valore iniziale dell'indice della riga è 0 e il valore finale dell'iteratore deve essere 1 inferiore al numero di righe della tabella. Altrimenti, c'è una probabilità del 100% che si verifichi un errore "Il valore dell'indice è fuori intervallo"

Fig.6

In generale è meglio enumerare le righe delle specifiche tecniche attraverso la costruzione “Per ciascuno... da”, definendo il nome dell'iteratore.

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

Una tabella elenca le merci da spedire dal magazzino. Un'altra tabella mostra gli obblighi di pagamento per questi beni.

Pertanto, in 1C, lavorare con le tabelle occupa un posto di rilievo.

Le tabelle in 1C sono anche chiamate “parti tabulari”. Directory, documenti e altro li hanno.

La query, una volta eseguita, restituisce una tabella a cui è possibile accedere in due modi diversi.

La prima selezione, più rapida, da cui si ottengono righe è possibile solo in ordine. Il secondo è caricare il risultato della query in una tabella di valori e quindi accedervi in ​​modo casuale.

//Opzione 1 – accesso sequenziale ai risultati della query

//prendi il tavolo
Seleziona = Query.Esegui().Select();
// esaminiamo in ordine tutte le righe del risultato della query
Mentre Select.Next() Ciclo
Rapporto(Selezione.Nome);
FineCiclo;

//Opzione 2 – caricamento in una tabella di valori
Richiesta = Nuova Richiesta("SELEZIONA Nome DA Directory.Nomenclatura");
//prendi il tavolo
Tabella = Query.Esegui().Scarica().
//inoltre possiamo anche scorrere tutte le righe
Per ogni riga del ciclo della tabella
Rapporto(String.Nome);
FineCiclo;
//o accedere arbitrariamente alle stringhe
Riga = Table.Find("Pala", "Nome");

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

Tabella nel modulo (thick client)

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

Abbiamo discusso i principi di base del lavoro con i moduli nella lezione successiva e nella lezione successiva

Quindi, posizioniamo la tabella sul modulo. Per fare ciò, puoi trascinare la tabella dal pannello Controlli. Allo stesso modo, puoi selezionare Controllo modulo/inserisci dal menu.

I dati possono essere memorizzati nella configurazione, quindi è necessario selezionare la parte tabellare esistente (precedentemente aggiunta) dell'oggetto di configurazione di cui si sta modificando il modulo.

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

Quando selezioni la parte tabellare, 1C stesso aggiungerà colonne alla tabella nel modulo. Le righe immesse dall'utente in tale tabella verranno salvate automaticamente insieme al libro/documento di consultazione.

Nella stessa proprietà Data è possibile inserire un nome arbitrario e selezionare il tipo Tabella valori.

Ciò significa che è stata selezionata una tabella di valori arbitraria. Non aggiungerà automaticamente le colonne, né verrà salvato automaticamente, ma puoi farci quello che vuoi.

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

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

Per gestire la tabella è necessario visualizzare sulla videata un pannello di comando. Seleziona la voce di menu Modulo/Inserisci controllo/Barra di comando.

Nelle proprietà della barra dei comandi, seleziona la casella di controllo Compilazione automatica in modo che i pulsanti sul pannello vengano visualizzati automaticamente.

Tabella sul modulo (thin client/gestito)

In un modulo gestito, queste azioni hanno un aspetto leggermente diverso. Se devi inserire una parte tabellare nel modulo, espandi il ramo Oggetto e trascina una delle parti tabellari verso sinistra. È tutto!

Se è necessario inserire una tabella di valori, aggiungere un nuovo attributo del modulo e nelle sue proprietà specificare il tipo – tabella di valori.

Per aggiungere colonne, utilizza il menu di scelta rapida su questo attributo del modulo, seleziona Aggiungi colonna attributo.

Quindi trascina anche la tabella a sinistra.

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

Caricamento di una tabella in Excel

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

Per fare ciò, fare clic con il tasto destro su uno spazio vuoto nella tabella e selezionare Elenco.

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

Un saluto a tutti i lettori di infostart. Questo articolo sarà dedicato alla questione della creazione di una tabella di valori arbitraria sotto forma di un'applicazione gestita a livello di codice.

Caratteristiche del compito.

Chiunque abbia programmato in un'applicazione normale si è spesso trovato di fronte al compito di ottenere una tabella di valori arbitraria su un modulo. Una tabella di valori arbitraria è una tabella il cui numero e tipo di colonne non sono noti in anticipo. Cioè potrebbero esserci 3 colonne, o forse 6, o forse 8. In una normale applicazione, tutto è semplice: potresti posizionare l'elemento “Tabella dei valori” sul modulo di elaborazione, e quindi trasferire la tabella dei valori creata ​a questo elemento a livello di codice. Poi con un semplice comando:

Modulo Elements.TableField.CreateColumns();

ottenere una tabella di valori già pronta sul modulo. Sembrerebbe che potrebbe essere più semplice.

Tutto questo era nella normale applicazione. In un'applicazione gestita tutto è cambiato. Non è così facile creare una tabella arbitraria. Ora è necessario parametrizzare rigidamente la tabella dei valori sul modulo o crearla a livello di codice (descrivere, beh, questa, in effetti, è l'essenza dell'applicazione gestita stessa). Questo è ciò che proveremo a fare: creare a livello di codice una tabella di valori arbitraria su un modulo controllato.

La soluzione del problema.

La prima cosa che dobbiamo fare è determinare come apparirà la tabella nel modulo. La cosa principale è che non è necessario creare alcun elemento del modulo durante l'elaborazione. Lo creeremo a livello di codice, come l'intera tabella. Cioè, la tabella verrà descritta e creata al momento dell'apertura del modulo o tramite un pulsante, a seconda di chi ne ha bisogno.

La creazione di una tabella sul form avviene attraverso la descrizione della tabella valori come attributo:
SelectionTypeArray = Nuovo array; Array di SelectionType.Add(Type("Tabella dei valori")); ChoiceTypeDescription = Nuova descrizione del tipo(ChoiceTypeArray); Serie di dettagli = Nuova serie; Array of Attributes.Add(New Form Attributes("Tabella di pianificazione", Descrizione di SelectionType, "", "TZN")); Ora dobbiamo creare una tabella dei valori del programma che contenga i dati. Se la tabella dei valori viene ottenuta da una query, allora è più o meno tutto in ordine. Se la tabella viene creata manualmente allora il significato delle colonne che conterranno numeri o date potrà essere creato attraverso la “Descrizione delle Tipologie”. Il punto è che le colonne nella tabella dei valori devono avere un tipo. Se, ad esempio, si prevede che l'utente inserisca i dati in queste colonne in modo interattivo, non è possibile aggiungere una colonna della tabella dei valori semplicemente con un nome; deve avere un tipo. Tieni presente che questo è molto importante perché... Trasferiremo questi tipi nella tabella del modulo.
Creiamo una tabella che contiene diverse colonne:
CD = NewDateQualifiers(DateParts.Time); ArrayKD = Nuovo array; ArrayCD.Add(Tipo("Data")); DescrizioneTipiOra = Nuovi tipi di descrizione(ArrayCD,CD); TZ = Nuova tabella valori;
TK.Columns.Add("Con", DescriptionTypesTime);
TK.Columns.Add("Prima", DescriptionTypesTime);
TK.Columns.Add("Nome");
TK.Columns.Add("Note"); // Nome completo e nota - righe Successivamente riempiremo la tabella del nostro programma TK con i dati necessari. Riceviamo una tabella TK che contiene i valori necessari ed è pronta per essere trasferita all'attributo del modulo creato. Per ogni colonna da TK.Ciclo colonne

Array di attributi.Add (nuovi attributi del modulo (colonna.nome, colonna.valoretipo, "tabella di pianificazione"));
FineCiclo;
ModificaDettagli(DettagliArray);
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = TableDisplay.List;

Questa è una combinazione semplice e il nostro tavolo è pronto.

Per ogni colonna da TK.Ciclo colonne

NuovoElemento = Elements.Add(Column.Name, Type("FormField"), SelectionFieldTable);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "Tabella di pianificazione." + Nome.Colonna;
NewElement.Width = 10;
FineCiclo;

Progettazione condizionale, se ne abbiamo bisogno, la scriviamo anche manualmente, il menu dei comandi - manualmente. Anche i gestori delle tabelle vengono scritti a mano. Ad esempio, per aggiungere un gestore eventi per la tabella "Selezione":

Tabella di SelectionFields.SetAction("Selection","TZNSelection");

Per elaborare questo evento, è prescritta una procedura separata sotto forma di procedura:

&SuClient
Procedura TKNSelezione(TK, RigaSelezionata, Campo, ElaborazioneStandard)
//il gestore comanda EndProcedure

Si noti che i gestori di tabelle vengono attivati ​​sul client e pertanto devono disporre di un comando del puntatore del compilatore

&SuClient

Bene, l'ultima cosa che volevo aggiungere è che dopo tutti questi passaggi, assicurati di ricordarti di passare la tabella finita all'attributo form:

ValueFormAttributes(ToR, "ScheduleTable");

Questo è ciò che abbiamo come risultato:


Ed ecco la gestione dell'evento "Selezione":



Epilogo.

Spero che l'articolo possa aiutare quei programmatori 1C che stanno iniziando a creare tabelle su un modulo a livello di codice.

Puoi scaricare un'elaborazione che crea a livello di codice una tabella di valori e la visualizza in un modulo gestibile con commenti che ti aiuteranno a creare le tue tabelle.

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

1. Trova

TVHorizon = Directories.Nomenclature.FindByName("TVHorizon");
Stringatrovata = TZNomenclature.Find(TVHorizon);
//possiamo anche specificare in quali colonne effettuare la ricerca per velocizzare la ricerca
FoundString = TZNomenclature.Find(TVHorizon, "Nomenclature");

Questo metodo restituisce la prima riga trovata con il valore desiderato oppure Undefine se non la trova. Pertanto, è conveniente utilizzarlo per cercare valori univoci, perché altrimenti, quando viene trovato un valore, sarà necessario rimuoverlo dalla tabella per poter trovare quello successivo.

Per evitare questo problema, esiste il seguente metodo che consente di trovare un array di stringhe corrispondenti:

2. TrovaStringhe


Struttura di selezione.Insert("Nomenclatura", TVHorizon); // indica prima la colonna in cui 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 stesse e non i valori stessi in un array separato. Pertanto, modificando i valori nella stringa dell'array o, come nel metodo precedente, nella stringa trovata, si modificherà il valore nella tabella dei valori elaborata.

Un altro aspetto positivo di questo metodo è che può cercare contemporaneamente in più colonne della tabella dei valori:


SelectionStructure = Nuova struttura;
Struttura di selezione.Insert("Nomenclatura", TVHorizon);
Struttura di selezione.Insert("Quantità", 10);
FoundArray di righe = TZNomenclature.FindLines(SelectionStructure);

L’unico aspetto negativo, come puoi vedere, è che non puoi utilizzare altri tipi di confronto diversi da “uguali”