Casa / Skype / 1s uv selezione della fonte di addizione della lista dinamica. Elaborazione e progettazione di dati di liste dinamiche. Ottenere i dati visualizzati da un elenco dinamico

1s uv selezione della fonte di addizione della lista dinamica. Elaborazione e progettazione di dati di liste dinamiche. Ottenere i dati visualizzati da un elenco dinamico

Stampa (Ctrl+P)

elenco dinamico

1. Informazioni generali

Un elenco dinamico è un tipo di dati speciale che consente di visualizzare informazioni arbitrarie da tabelle di database su un modulo. Per fare ciò, è necessario specificare la tabella, i dati da cui si desidera visualizzare o descrivere la selezione risultante nel linguaggio di query.
Il meccanismo si basa su un sistema di composizione dei dati e fornisce opzioni per l'ordinamento, la selezione, la ricerca, il raggruppamento e l'elaborazione condizionale dei dati ricevuti. In questo caso, l'origine dati è una richiesta generata automaticamente dal sistema (in base ai dati specificati) o scritta manualmente dallo sviluppatore.

Riso. 1. Opzioni per la creazione di un elenco dinamico

Quando si crea un attributo del modulo di tipo Elenco dinamico Lo sviluppatore può scegliere due modi per interrogare i dati:
● Specificando la tabella principale, in questo caso è sufficiente specificare la tabella (proprietà tabella principale) da cui si desidera ottenere i dati e il sistema genererà automaticamente una query sui dati (vedere il lato destro in Fig 1).
● Generazione manuale di una richiesta: per fare ciò, è necessario impostare la proprietà Richiesta personalizzata (vedere il lato sinistro della Fig. 1). Successivamente sarà disponibile la generazione manuale di una richiesta per ottenere i dati dall'infobase.
Con una query, puoi selezionare i dati da più tabelle, in modo da poter specificare una tabella primaria. Ciò è necessario affinché l'elenco dinamico possa determinare quali dati sono primari e quali secondari e possa selezionare e visualizzare correttamente le informazioni, oltre a fornire comandi standard. Tuttavia, se è impossibile determinare la tabella principale nella query, è possibile ometterla, ma poi
l'elenco dinamico non fornirà comandi relativi alla tabella sottostante. Inoltre, in questo caso (senza specificare la tabella principale), l'efficienza di ottenere i dati da un elenco dinamico sarà notevolmente ridotta.
Per migliorare le prestazioni, si consiglia di rendere facoltativi tutti i join utilizzati in una query arbitraria solo per recuperare dati aggiuntivi utilizzando un'estensione del linguaggio di query del sistema di composizione dati.
Per un elenco dinamico, che è l'attributo principale del modulo, è possibile impostare i valori di selezione utilizzando il parametro del modulo Selezione. Per fare ciò, è necessario che il nome della proprietà della struttura, che si trova nel parametro Selezione,
corrispondeva al nome del campo di selezione dell'elenco dinamico. In questo caso, il valore della proprietà della struttura verrà impostato come valore corretto dell'elemento di selezione. Se un array, un array fisso o un elenco di valori viene passato come valore di un elemento del parametro Selezione del modulo Elenco dinamico, alla selezione viene aggiunta una condizione con l'opzione In elenco, nel cui valore corretto viene posizionato l'elenco dei valori (in cui vengono convertiti l'array e l'array fisso).
Una query arbitraria in un elenco dinamico può essere una query in cui un parametro viene utilizzato per generare il valore di un campo, ad esempio:

SCEGLIERE
SCELTA
QUANDO Delivery.Factor = 1 THEN &Submission
ALTRO Consegna. Coefficiente
FINE COME Coefficiente
DA

In questo caso, se il tipo di valore del parametro è diverso dal tipo di attributo dell'oggetto (ad esempio, Puntelli1 ha tipo Numero e il valore del parametro è il tipo Linea), quindi per visualizzare correttamente il campo, è necessario eseguire il cast esplicito del valore del parametro sul tipo desiderato:

SCEGLIERE
SCELTA
WHEN Delivery.Factor = 1 THEN EXPRESS(&Representation AS String(100)) ELSE Delivery. Coefficiente
FINE COME Coefficiente
DA
Documento.ConsegnaProdotti COME Consegna

Se il campo su cui è impostato il filtro è disabilitato utilizzando le opzioni funzionali, il filtro su questo campo non viene impostato, anche se il valore del filtro viene passato come parametri del modulo o collegamenti ai parametri di selezione.
Utilizzando la proprietà Lettura dati dinamica, viene indicato un elenco dinamico per la necessità di leggere i dati in piccole porzioni
(per maggiori dettagli su come ottenere dati da un elenco dinamico e come memorizzare i dati nella cache, vedere di seguito). Indipendentemente da questa caratteristica, si applicano le seguenti condizioni:

● Se la modalità di visualizzazione è impostata su elenco gerarchico, solo i dati del gruppo corrente ei dati di tutti elementi genitori(senza elementi subordinati).
● Se è impostata la modalità di visualizzazione ad albero, verranno letti solo i dati dei nodi ad albero aperti.
● Il caricamento una tantum dei dati dell'elenco dinamico non è supportato quando è impostata una vista gerarchica (la proprietà Visualizza è impostata su Struttura) e la vista struttura iniziale è impostata su Espandi tutti i livelli. Per ottenere i dati, verranno effettuate tante richieste al server quanti sono i nodi nell'elenco visualizzato.
All'interno di un'unica acquisizione dati, un elenco dinamico riutilizza le tabelle temporanee precedentemente create, soggette alle seguenti condizioni:
● Non sono presenti query dopo la query batch principale nella query batch elenco.
● La composizione delle tabelle temporanee e dei relativi campi non è cambiata rispetto alla precedente esecuzione della query batch.

Nel suo lavoro, l'elenco dinamico utilizza i valori delle seguenti proprietà degli attributi degli oggetti di metadati:
● formato,
● formato di modifica,
● suggerimento,
● segno di evidenziazione di valori negativi,
● maschera,
● segno di modalità multilinea,
● segno di editing avanzato,
● modalità password.
Durante la visualizzazione e la modifica della selezione e dei parametri del sistema di composizione dei dati, viene utilizzato il formato di modifica del campo corrispondente.

2. Limitazioni e caratteristiche

Quando si imposta un filtro in un elenco dinamico, ricordare che il filtro non ha effetto sui gruppi se la modalità di visualizzazione dell'elenco dinamico è Elenco gerarchico o Albero. Per "gruppi" si intende un elemento di un libro di riferimento o un piano di tipi di caratteristiche, in cui la proprietà ThisGroup è impostata su True.
Vengono applicati i filtri applicati automaticamente dall'elenco dinamico agli attributi standard Proprietario, Padre, Data, Periodo e QuestoGruppo
mezzi standard sistemi di composizione dei dati. I filtri applicati automaticamente da un elenco dinamico ai campi chiave possono essere applicati sia tramite il sistema di composizione dei dati standard sia aggiungendo direttamente una condizione al testo della query A nei campi della tabella principale. Grazie all'utilizzo dei filtri da parte degli strumenti di layout, possono essere applicati sia nelle query nidificate che nei parametri delle tabelle virtuali.

Quando si sviluppano elenchi dinamici, è una buona idea testare tutti gli elenchi dinamici con query personalizzate. Durante il processo di verifica, è necessario assicurarsi che se la query elenco contiene query nidificate o tabelle virtuali e campi con alias che corrispondono agli alias degli attributi standard Proprietario, Padre, Data, Periodo, Questo gruppo o campi chiave sono disponibili per la selezione, quindi questi campi sono validi corrispondono agli attributi standard con cui hanno lo stesso alias. In caso contrario, è necessario modificare la richiesta in modo che corrisponda a o
alias è diverso.
Se viene selezionata la generazione manuale della query, vengono imposte alcune restrizioni alla query:
● L'utilizzo della clausola FIRST in una query di elenco dinamico non è supportato. Se è necessario utilizzare una selezione in un elenco dinamico che è limitato dal numero di record, la query per la generazione di un elenco dinamico deve essere rielaborata in modo tale che il contenuto effettivo della query sia inserito in una sottoquery e limiti il numero di record ricevuti in questa sottoquery. Puoi anche usare una tabella temporanea invece di una sottoquery.
● Il filtraggio, l'ordinamento e il raggruppamento non sono supportati:

  • Per dettagli parti tabulari.
  • Visualizza campi.
  • campo DataVersion.
  • Il campo NomeDatiPredefinito.
  • Campo Tipo di tabella del piano dei conti.
  • Il campo MovementType della tabella dei registri di accumulo.
  • Tipo di campoValori della tabella dei tipi di caratteristiche del piano.
  • Campo di tipo Tipo;
  • Campo di tipo String (lunghezza illimitata).
  • Campo di tipo BinaryData.

● L'ordinamento e il raggruppamento in base ai campi Subconto non sono supportati<НомерСубконто>e digitare Sottoconto<НомерСубконто>Tabelle MovimentiSottoconto registro contabile.
● Il raggruppamento per campi che sono espressioni del linguaggio di query che contengono funzioni di aggregazione non è supportato.
● Con la tabella principale selezionata, la query dell'elenco dinamico presenta le seguenti limitazioni:

  • I join non sono supportati.
  • L'uso della sezione ORDINA PER non è supportato. È necessario utilizzare una query senza una tabella principale o impostare l'ordinamento necessario tramite le impostazioni dell'elenco dinamico.

● Se un elenco dinamico viene visualizzato come elenco o albero gerarchico, una voce non verrà visualizzata come elenco dinamico a meno che non venga visualizzato almeno un genitore di questa voce. In altre parole, per visualizzare un elemento in un elenco gerarchico, l'elenco dinamico deve visualizzare anche tutti i genitori di quell'elemento fino all'inizio dell'elenco. In questo caso, la parte superiore dell'elenco significa entrambi
l'elemento radice dell'oggetto gerarchico rappresentato dall'elenco dinamico o l'elemento impostato come proprietà ParentTopLevel dell'estensione della tabella del modulo elenco dinamico.

L'utilizzo delle seguenti tabelle come tabella principale di un elenco dinamico non è supportato:

● Una tabella che non dispone di una chiave che identifichi in modo univoco ciascuna voce della tabella (riferimento per le tabelle degli oggetti e chiave di immissione per le tabelle dei registri). Tuttavia, le seguenti tabelle possono essere impostate come tabella principale di un elenco dinamico (nonostante la mancanza di una chiave):

● Sottoconto tabella del registro contabile;
● tutte le tabelle virtuali del registro contabile, ad eccezione della tabella MovimentiSubconto;
● tabelle di valori costanti (compresa la tabella Costanti);
● tavoli fonti esterne dati senza campi chiave;
● tabelle a cubo di origini dati esterne;
● tabelle dei registri di accumulo:

  • tabella del fatturato;
  • tavola dell'equilibrio;
  • tabella dei fatturati e dei saldi.

● tabelle dei registri di calcolo:

  • tabella dei periodi di validità effettiva;
  • dati del grafico;
  • dati di base.

● Tabelle delle parti tabulari degli oggetti;
● Tabelle di registrazione delle modifiche (utilizzate nei meccanismi di scambio dei dati);
● tabelle di sequenza;
● Tabelle di conversione (utilizzate nei motori di regolamento ricorrenti).
● Una tabella utilizzata in una query solo in un join esterno.

In altre parole, un elenco dinamico con una tabella principale specificata funzionerà correttamente se, a seguito dell'esecuzione della query,
specificato come origine dati, il numero di righe ricevute dalla tabella principale non aumenta (tenendo conto della selezione imposta). Se, a seguito dell'esecuzione della query, il numero di righe ricevute dalla query dalla tabella principale aumenta, ciò comporterà una violazione dell'unicità della chiave del record della tabella visualizzata dall'elenco. In questo caso, è necessario disabilitare l'utilizzo della tabella principale della lista dinamica.
Quando si lavora con un elenco dinamico, è necessario tenere conto dei diritti di accesso ai dettagli visualizzati dall'elenco:
● I dati delle colonne dell'elenco dinamico contrassegnate con la proprietà Usa sempre, ma per le quali l'utente corrente non dispone del diritto Visualizza, non vengono trasferiti sul lato client. Accesso ai dati di tali colonne (usando la proprietà CurrentData e il metodo RowData())
lato cliente non è possibile.
● Se l'utente corrente non dispone del diritto Visualizza su un campo chiave di un elenco dinamico, il recupero dei dati da questo elenco dinamico comporta un errore di violazione di accesso.
Non esiste alcuna opzione per un elenco dinamico che esegue il rendering di un elenco enum impostazioni interattive elenco.
La composizione delle colonne e le impostazioni dell'elenco dinamico sono associate ai campi della query tramite gli alias dei campi di selezione. Se l'alias per il campo di selezione non è specificato in modo esplicito nella query e il campo è un campo di sistema, come alias viene utilizzato il nome del campo per la versione inglese della lingua incorporata.
La relazione specificata significa che quando si modifica (o si specifica esplicitamente un alias per un campo che utilizzava un alias automatico)
alias del campo di query che genera i dati dell'elenco dinamico, le impostazioni dell'attributo dell'elenco dinamico andranno perse, gli elementi del modulo "perderanno" gli attributi visualizzati, le impostazioni dell'elenco dinamico diventeranno errate, ecc.
Nel caso in cui l'origine dati di un elenco dinamico sia una tabella (normale o virtuale), che consente di impostare la selezione per periodo, se l'utente imposta il periodo di visualizzazione in tale elenco dinamico (il Set date interval.. . comando),
i limiti del periodo specificato verranno impostati come valori di selezione o parametri della tabella virtuale. Se i mezzi di estensione della lingua
le query per il sistema di composizione dei dati specificano esplicitamente i nomi dei parametri della tabella virtuale - i parametri verranno impostati con il specificato
nomi. Tabelle per le quali è possibile controllare il periodo di visualizzazione o elaborazione dei dati:
● tabelle dei registri (principali o virtuali), per i quali esiste la possibilità di selezione per periodo (per il calcolo registro - per periodo di iscrizione);
● tabelle principali di documenti, processi e attività aziendali;
● tabelle principali delle riviste documentali;
● tabelle di sequenza principali, tabelle di limiti di sequenza.
Il parametro di query di un elenco dinamico può essere una matrice o un elenco di valori. Tuttavia, se il parametro è un elenco di valori, solo il primo valore dell'elenco verrà utilizzato come valore del filtro. Se un elenco dinamico utilizza una query con parametri, l'impostazione iniziale dei valori dei parametri deve essere eseguita nel gestore OnCreateAtServer.
Quando si visualizzano i dati dell'elenco dinamico, tenere presenti i seguenti punti:
● Quando cambio di programma le proprietà di un elenco dinamico non ripopola automaticamente le barre dei comandi associate
con questo elenco dinamico.
● Se più campi sono raggruppati in un gruppo con modalità di raggruppamento Nella cella e nei campi raggruppati è presente un campo che viene visualizzato con una casella di spunta, questa casella di spunta sarà sempre visualizzata per prima nella cella risultante (a sinistra del testo ).
In un elenco dinamico, quando si definisce il tipo di dati per i campi le cui espressioni includono parametri, campi o valori letterali, il tipo risultante è determinato dai tipi di campi e valori letterali. Se il tipo di valore del parametro non è incluso nel tipo di dati risultante, il suo valore verrà troncato.
Ad esempio, nell'esempio seguente, il campo sarà di tipo Numero.

SCELTA
QUANDO FALSO
POI 5
ALTRIMENTI
&Parametro
LA FINE

Se si assegna un valore di tipo diverso al parametro Parametro, l'elenco dinamico per questo campo riceverà il valore 0 (il valore predefinito per il tipo Numero).
Se in una situazione del genere è necessario selezionare un parametro di tipo diverso, si consiglia di utilizzare il costrutto del linguaggio di query ESPRIMERE. Per esempio,
se nell'esempio sopra si vuole passare una stringa non più lunga di 100 caratteri al parametro, allora è necessario sostituire la semplice indicazione del parametro con un'espressione con conversione di tipo esplicita:

SCELTA
QUANDO FALSO
POI 5
ALTRIMENTI
EXPRESS(&Parametro AS String(100))
LA FINE

Se si utilizzano parametri nelle espressioni dei campi di selezione nel testo libero della query elenco dinamico, è necessario specificare esplicitamente la tipologia dei parametri utilizzando la costruzione ESPRIMERE. Ad esempio, invece di &Nomenclatura AS Nomenclatura uso
EXPRESS(&Nomenclature AS Directory.Nomenclature) AS Nomenclatura. In caso contrario, la ricerca tramite la barra di ricerca potrebbe funzionare.
errori di lancio o errati.

3. Metodi per ottenere e memorizzare nella cache i dati con un elenco dinamico

Quando si ricevono i dati da visualizzare, un elenco dinamico utilizza uno dei tre metodi seguenti:
1. La lettura dal database viene eseguita in batch con il numero di elementi di dati leggermente superiore al numero di righe visualizzate contemporaneamente dall'elenco (ma non inferiore a 20). I dati non sono memorizzati nella cache sul server.
2. La lettura dal database viene eseguita in pagine di 1.000 elementi di dati. I dati vengono memorizzati nella cache sul server. I dati gerarchici vengono memorizzati nella cache: non vengono memorizzate nella cache più di 2 pagine di elementi per ciascun genitore. Non vengono memorizzate nella cache più di 20 pagine di elementi per elenco dinamico. La memorizzazione nella cache sarà abilitata dall'elenco dinamico per le seguenti tabelle:
● criteri di selezione;
● Tutte le tabelle contabili, ad eccezione della tabella principale e della tabella MovimentiSubconto;
● Tutte le tabelle del registro di accumulazione, ad eccezione della tabella principale;
● Tutte le tabelle del registro delle informazioni, ad eccezione della tabella principale;
● Tutte le tabelle del registro di calcolo, ad eccezione della tabella principale;
● Tavolo virtuale TasksBy Performer;
● Tabelle di sorgenti esterne senza chiavi;
● Cubi di origine esterni.

3. La lettura dal database viene eseguita in pagine di 1.000 elementi. La prima porzione è uguale a 1 pagina. Ogni porzione successiva aumenta di 1 pagina (quando viene raggiunta la fine del campione precedente). Più il "punto di vista" si avvicina alla fine dei dati visualizzati, maggiore è la selezione dal database, nel limite che diventa uguale a tutti i dati visualizzati. I dati vengono memorizzati nella cache sul server. Il numero massimo di voci nella cache e nell'elenco dinamico è 1.000.000.
A seconda di ciò che viene selezionato dalla tabella principale dell'elenco dinamico e del valore che assume la proprietà Lettura dinamica, viene utilizzato uno o un altro metodo di lettura dei dati:

● Una delle seguenti tabelle è specificata come valore della proprietà Tabella principale: piano di scambio, ricerca, elenco di documenti, giornale di registrazione documenti, tipo di piano delle caratteristiche, piano dei conti, tipo di piano di calcolo, processo aziendale, attività, tabella di punti del processo aziendale:



● Come valore della proprietà Main table è specificata una delle seguenti tabelle: la tabella principale del registro delle informazioni, del registro di accumulazione, del registro contabile, del registro dei regolamenti, della tabella virtuale del registro contabile MovimentiSubconto:

● Proprietà di lettura dinamica:
● Installato: viene utilizzato il metodo 1 (i metodi sono descritti sopra).
● Reset: viene utilizzato il metodo 2 (i metodi sono descritti sopra).

● Come proprietà Tabella principale, viene specificata una tabella dei criteri di selezione o una tabella delle attività per esecutore (TasksBy Executor):
● Chiave che identifica una riga della tabella: Link.

● La proprietà della tabella principale è impostata sulla tabella virtuale del registro delle informazioni SliceFirst o SliceLast:
● Chiave che identifica una riga della tabella: RecordKey.
● La proprietà Lettura dinamica non è applicabile.
● Viene utilizzato il metodo 2 (i metodi sono descritti sopra).

● La proprietà Tabella principale è impostata su uno dei tavoli virtuali registri diversi da quelli sopra elencati:

● La proprietà Lettura dinamica non è applicabile.

● La proprietà della tabella Main non è specificata, viene utilizzata richiesta arbitraria:
● Chiave che identifica una riga della tabella: Numero.
● La proprietà Lettura dinamica non è applicabile.
● Viene utilizzato il metodo 3 (i metodi sono descritti sopra).

Per la visualizzazione, i dati vengono trasferiti al client in blocchi, la cui dimensione è simile alla dimensione del blocco nel primo metodo di lettura dei dati (descritto all'inizio di questa sezione).
Quando si crea un modulo contenente un elenco dinamico, vengono inizialmente passati al client 45 elementi di dati per ciascun elenco dinamico visibile (se l'elenco contiene più di 45 elementi). Se l'elenco dinamico visualizza più di 45 righe, all'apertura del modulo verrà effettuata un'ulteriore chiamata al server per recuperare gli elementi di dati mancanti.

4. Impostazioni dell'elenco dinamico

Proprietà delle impostazioni dell'elenco: facendo clic sul collegamento ipertestuale Apri si apre il modulo delle impostazioni di visualizzazione dell'elenco dinamico. L'impostazione dell'elenco viene eseguita allo stesso modo di operazioni simili nel sistema di composizione dei dati.


Riso. 2. Stile condizionale di un elenco dinamico

Quando si imposta un elenco dinamico nella configurazione, lo sviluppatore della soluzione applicata ha l'opportunità di effettuare le seguenti operazioni:
● impostare i campi in base ai quali effettuare l'ordine;
● descrivere la selezione dei dati nell'elenco;
● specificare le impostazioni di formattazione condizionale;
● impostare i campi in base ai quali si desidera raggruppare i dati.
Ha senso impostare l'ordinamento per lo sviluppatore se l'ordinamento predefinito impostato dal sistema non è adatto.

CONSIGLIO. Va ricordato che una scarsa selezione dei campi di ordinamento (così come la selezione e il raggruppamento dei dati) influisce negativamente sull'efficienza del campionamento dinamico.
Dal punto di vista di uno sviluppatore di applicazioni, le impostazioni dell'elenco dinamico sono costituite da diverse parti interconnesse. La proprietà principale attraverso la quale è possibile controllare le impostazioni di un elenco dinamico è Impostazioni del linker. Questo oggetto contiene tre set di impostazioni che, quando il sistema è in esecuzione, determinano le impostazioni finali applicate all'elenco dinamico:
● Impostazioni: impostazioni create nella modalità Configuratore. Fornisce la proprietà dell'elenco dinamico dell'ordine accesso veloce alla proprietà del generatore di impostazioni dell'elenco dinamico Settings.Order, quindi i seguenti costrutti sono equivalenti:
List.Order e List.SettingsComposer.Settings.Order;
● Impostazioni utente sono le impostazioni che l'utente può modificare in 1C: modalità Enterprise;
● FixedSettings - Queste impostazioni sono impostate dalla lingua incorporata. Questa proprietà contiene anche i valori di selezione che vengono passati al modulo utilizzando i suoi parametri. Le proprietà dell'elenco dinamico Filtro, Parametri, Aspetto condizionale forniscono un rapido accesso alle impostazioni fisse del generatore di impostazioni dell'elenco dinamico. In altre parole, queste chiamate sono equivalenti:
List.SettingsComposer.FixedSettings.Filter e List.Filter.
Quando si forma l'impostazione finale dell'elenco dinamico, varie opzioni le impostazioni sono combinate come segue:
● Se un qualsiasi tipo di impostazione è interamente contrassegnato come definito dall'utente, le impostazioni utente vengono incluse nelle impostazioni risultanti
(Elenco.ImpostazioniCompositore.Impostazioni Utente). In questo caso, se qualsiasi elemento delle impostazioni è contrassegnato come non disponibile, queste impostazioni verranno inserite nelle impostazioni risultanti dalla proprietà List.Settings Composer. Impostazioni.
● Se un qualsiasi tipo di impostazione è contrassegnato come specifico dell'utente non interamente, ma elemento per elemento, allora:
● Gli elementi contrassegnati come personalizzati verranno inclusi nelle impostazioni risultanti dalla proprietà List.SettingsComposer.CustomSettings.
● Gli elementi contrassegnati come non disponibili verranno inclusi nelle impostazioni risultanti dalla proprietà List.SettingsComposer.Settings.
● Le impostazioni fisse (List.SettingsComposer.FixedSettings) vengono aggiunte alle impostazioni risultanti "così come sono". Allo stesso tempo, la situazione è inaccettabile quando le impostazioni fisse e utente contengono impostazioni con lo stesso nome, ad esempio la selezione con lo stesso valore sinistro nella condizione.

Se ci sono impostazioni nelle impostazioni dell'elenco dinamico che sono disabilitate utilizzando le opzioni funzionali, queste impostazioni verranno rimosse dall'elenco delle impostazioni disponibili quando vengono ricevuti i dati dell'elenco dinamico.
Controllo su quali impostazioni saranno disponibili per l'utente e quali non verranno eseguite nella finestra delle impostazioni dell'elenco dinamico.


Riso. 3. Gestione dell'inclusione nelle impostazioni dell'utente

La casella di controllo nella parte inferiore della finestra (vedi Fig. 3) è responsabile dell'inserimento dell'intero tipo di impostazioni nelle impostazioni (normali o rapide). Questa funzione è disponibile per la selezione, l'ordine, il raggruppamento e lo stile condizionale. Se le impostazioni sono specificate con la modalità di modifica Scelta rapida, quindi nella proprietà Gruppo Impostazioni utente della tabella moduli che visualizza un elenco dinamico, è necessario specificare un gruppo modulo vuoto in cui si troveranno gli elementi associati alle impostazioni utente rapide dell'elenco dinamico. Se il gruppo non è specificato, le impostazioni utente rapide non verranno visualizzate nel modulo. È anche possibile chiamare in modo esplicito la creazione di impostazioni utente utilizzando il linguaggio 1C:Enterprise utilizzando il metodo CreateUserSettingsFormItems() dell'estensione elenco dinamico.
È anche possibile scegliere la possibilità di inserire voci di impostazioni specifiche nelle impostazioni dell'utente. Questa funzione è disponibile per la selezione e gli elementi di progettazione condizionali (vedi Fig. 3).

Se è necessario che vengano caricate impostazioni speciali all'apertura di un elenco dinamico, è possibile farlo in due modi:
● Utilizzo del parametro del modulo elenco dinamico CustomSettings. I dati contenuti in questo parametro verranno inseriti nelle impostazioni utente dell'elenco dinamico.
● Utilizzo del parametro UserSettingsKey del modulo elenco dinamico. Se si specifica questo parametro all'apertura del modulo, le impostazioni utente che si trovano nella memoria delle impostazioni con la chiave specificata verranno caricate nell'elenco dinamico, che è l'attributo principale del modulo.

5. Cerca in un elenco dinamico

L'elenco dinamico che si trova nel modulo offre la possibilità di eseguire ricerca interattiva nei dati visualizzati. La ricerca può essere eseguita utilizzando i seguenti strumenti: stringa di ricerca, finestra di dialogo di ricerca, ricerca del valore corrente, utilizzo della cronologia delle ricerche e impostazione del periodo (per elenchi dinamici che visualizzano documenti). Il risultato della ricerca è un insieme limitato di record
elenco dinamico (da disponibile dato utente) che corrispondono ai criteri di ricerca.
Sono disponibili tre proprietà di tabella per controllare le capacità di ricerca in un elenco dinamico forma gestita, che visualizza un elenco dinamico:
● Posizione della stringa di ricerca: definisce la posizione della stringa di ricerca. Può assumere i seguenti valori: Auto, Pannello dei comandi, No, In alto, In basso.


Riso. 4. Barra di ricerca nell'elenco dinamico

Se il valore di questa proprietà è impostato su Barra dei comandi, la barra di ricerca verrà visualizzata nella barra dei comandi del modulo (se l'elenco dinamico è l'attributo principale del modulo) o nella barra dei comandi associata all'elenco dinamico. La barra di ricerca posta nella barra dei comandi è sempre premuta sul bordo destro della barra dei comandi (insieme ai pulsanti posti a destra della barra di ricerca).
Se la proprietà è impostata su No, la stringa di ricerca sarà assente nel modulo e all'inizio della digitazione stringa di ricerca si aprirà una finestra di dialogo.
Se la proprietà è impostata su Top, la barra di ricerca si troverà tra la barra dei comandi dell'elenco e la tabella che mostra l'elenco dinamico. Se la proprietà è impostata su Bottom, la stringa di ricerca verrà posizionata immediatamente dopo la tabella che mostra l'elenco dinamico.


● Se la proprietà Modalità compatibilità è impostata su Non utilizzare o precedente alla versione 8.3.4, il valore è Pannello dei comandi.
Il passaggio alla barra di ricerca avviene come segue:
● Premendo la combinazione di tasti Ctrl+F;
● Mouse;
● Quando si inizia a digitare in un elenco dinamico (basato sul valore della proprietà SearchOnType dell'elenco dinamico).
● Visualizza posizione stato: descrive dove verrà visualizzato lo stato di visualizzazione: quali campi sono stati cercati e quali valori
ricercato in ogni campo. Può assumere i seguenti valori: Auto, Nessuno, In alto, In basso


Riso. 5. Cerca lo stato nell'elenco dinamico

Se la proprietà è impostata su No, lo stato di visualizzazione non sarà presente nel modulo. Di conseguenza, sarà possibile determinare se la ricerca è stata eseguita o meno solo grazie alla disponibilità del pulsante Annulla ricerca.
Se la proprietà è impostata su Top, lo stato di visualizzazione si troverà tra la barra dei comandi dell'elenco e la tabella che mostra l'elenco dinamico. Se la proprietà è impostata su Bottom, lo stato di visualizzazione verrà posizionato immediatamente dopo la tabella che visualizza l'elenco dinamico.
Se il modulo è stato creato in 1C:Enterprise versione 8.3.4 e precedenti, la proprietà è impostata su No. Se il modulo è stato creato in 1C:Enterprise versione 8.3.5 e successive, la proprietà è impostata su Auto. Il valore reale dell'immobile in questo caso sarà determinato come segue:
● Se la proprietà Modalità compatibilità è impostata sulla versione 8.3.4 (e precedenti) – No;
● Se la proprietà Modalità compatibilità è impostata su Non utilizzare o precedente alla versione 8.3.4, il valore è Superiore;
● Posizione di controllo della ricerca: determina dove verrà visualizzato il pulsante di controllo della ricerca. Il pulsante apre un menu che contiene le seguenti informazioni: comandi Trova per valore corrente, Ricerca avanzata, Annulla ricerca, Imposta periodo (per elenchi di documenti e giornali) e cronologia delle query di ricerca (ultime 5 query). La proprietà può assumere valori: Auto, No, Pannello dei comandi.


Riso. 6. Gestione della ricerca in un elenco dinamico

Se la proprietà è impostata su No, il pulsante di controllo della ricerca non sarà nel modulo (ma i comandi saranno disponibili utilizzando il menu Altro). Il valore della proprietà Barra dei comandi inserisce un pulsante sulla barra dei comandi associata a una tabella che visualizza un elenco dinamico.
Se il modulo è stato creato in 1C:Enterprise versione 8.3.4 e precedenti, la proprietà è impostata su No. Se il modulo è stato creato in 1C:Enterprise versione 8.3.5 e successive, la proprietà è impostata su Auto. Il valore reale dell'immobile in questo caso sarà determinato come segue:
● Se la proprietà Modalità compatibilità è impostata sulla versione 8.3.4 (e precedenti) – No;
● Se la proprietà Modalità compatibilità è impostata su Non utilizzare o precedente alla versione 8.3.4, il valore è Pannello comandi;
Se nel modulo sono presenti più pannelli di comando, la cui origine del comando è una tabella del modulo gestito (che visualizza i dati dell'elenco dinamico), la stringa di ricerca e il pulsante di controllo della ricerca si troveranno in un solo pannello di comando:
● Oppure nella barra dei comandi dell'elenco dinamico stesso (se è abilitato il completamento automatico)
● O in uno qualsiasi dei restanti pannelli di comando.

Considera le caratteristiche dell'utilizzo della ricerca in un elenco dinamico:
● Affinché la ricerca sia pratica da usare (anche in termini di prestazioni), è necessario abilitarla ricerca a tutto testo per tutti gli oggetti di configurazione che possono essere utilizzati come tabella di elenco dinamica principale. Inoltre, la ricerca full-text dovrebbe includere tutti i dettagli degli oggetti di configurazione che possono essere visualizzati in un elenco dinamico e per i quali potrebbe essere richiesta una ricerca.
Se l'oggetto è escluso dalla ricerca full-text, il meccanismo di ricerca in questione funzionerà, ma le prestazioni di tale ricerca saranno estremamente basse. Non è consigliabile utilizzare la ricerca su oggetti che non sono indicizzati dalla ricerca full-text.
● La soluzione applicativa deve avere compito di routine, che aggiorna regolarmente l'indice di ricerca full-text.

● La ricerca non viene eseguita su tutte le colonne dell'elenco dinamico (e dell'oggetto di configurazione), ma solo su quelle colonne visualizzate nella tabella.
● La ricerca in un elenco dinamico per campi di tipi di riferimento con rappresentazione arbitraria viene eseguita da campi utilizzati per
formazione della rappresentanza (vedi qui). I campi inclusi nella vista si ottengono tenendo conto del gestore ViewFieldsGetProcess() dell'oggetto corrispondente.
● Per gli elenchi dinamici con una tabella principale specificata, viene utilizzata una ricerca full-text nella tabella principale. Tutti i collegamenti non indicizzati dalla tabella principale verranno aggiunti ai risultati della ricerca full text. Il risultato della ricerca full-text per la tabella principale viene utilizzato come filtro per campi chiave. Viene eseguita anche una ricerca full-text sui campi visualizzati nell'elenco di altre tabelle (se si utilizza la ricerca full-text per il campo e l'oggetto di configurazione). Senza la ricerca full-text abilitata, i dati potrebbero esserlo
trovato, ma la ricerca stessa sarà molto lenta.
Se si verifica un errore durante il tentativo di eseguire una ricerca full-text, la ricerca verrà eseguita senza utilizzare la ricerca full-text.
Ad esempio, questo può accadere durante la ricerca di una singola lettera e un largo numero linee dentro base informativa a partire da questa lettera.
● Se si utilizza la selezione con il tipo di confronto Uguale per il campo della tabella principale dell'elenco dinamico, quando si esegue una ricerca full-text, il query di ricerca in base a questa tabella, verrà aggiunto il valore della selezione.
● La stringa di ricerca è suddivisa in parole. Questo partizionamento viene eseguito secondo le seguenti regole:
● La riga viene suddivisa utilizzando spazi e caratteri di tabulazione come delimitatori.
● Quindi ogni frammento risultante viene elaborato:
● Se il frammento è una rappresentazione di una data (con o senza ora) basata sulla locale corrente della sessione, allora il frammento è la parola.
● In caso contrario, il frammento viene ulteriormente suddiviso, utilizzando i caratteri “,.-/\” come separatori. In questo caso, ogni frammento risultante della stringa viene preso come una parola.

● Per ogni parola si forma il proprio insieme di condizioni, che sono combinate “da OR”. Questo insieme di condizioni viene generato se una ricerca full-text di una determinata parola nella tabella da cui è stato ottenuto questo campo ha restituito almeno un oggetto o se per questo campo non è stata utilizzata una ricerca full-text. Le condizioni sono formate come segue:
● Per un campo di tipo String, la condizione è FieldName LIKE %Word%.
● Per un campo di tipo Numero, la condizione è NomeCampo=Valore, dove Valore è una parola di cui è stato eseguito il cast su Numero. Se non è possibile eseguire il cast, la ricerca sul campo non verrà eseguita.
● La parola viene ricercata come sottostringa nella rappresentazione predefinita del tipo booleano definito per la sessione corrente. Se la parola da cercare viene trovata in una vista, viene eseguita una ricerca per il valore corrispondente alla vista in cui è stata trovata la parola. Allo stesso tempo, le viste specificate utilizzando la proprietà dell'elemento del modulo Format non vengono utilizzate per la ricerca.
● Per un campo di tipo Data, la condizione è FieldName>=DayStart(Word) AND FieldName<=КонецДня(Слово). Если Слово подобно дате, в которой год
specificato da una o due cifre, l'anno verrà convertito nel secolo corrente e questo valore verrà sostituito nella condizione di ricerca.
● Per i campi di riferimento, la ricerca viene eseguita sui campi utilizzati per formare la rappresentazione del collegamento. In ciascuno di questi campi cerca
eseguita secondo le regole sopra descritte. La ricerca non utilizza i campi utilizzati per formare una presentazione arbitraria dei dati.
L'insieme delle condizioni per ogni parola è combinato "da AND".
● Per i valori con zeri iniziali, è possibile eseguire la ricerca su una stringa con zeri iniziali o su una stringa specificata senza zeri iniziali.
● Se l'elenco dinamico visualizza un elenco di documenti o una cronologia dei documenti, l'intervallo di visualizzazione elenco specificato viene visualizzato anche nell'area del modulo dedicata alla visualizzazione dello stato di visualizzazione per l'elenco dinamico richiesto.
● Il comando di ricerca per valore attuale non è disponibile se la tabella principale dell'elenco dinamico è un criterio di selezione.
● I frammenti di righe trovati vengono evidenziati quando visualizzati nella tabella.
● È supportata una sola stringa di ricerca per colonna. L'aggiunta di un nuovo termine di ricerca per una colonna già in fase di ricerca sostituirà l'espressione di ricerca anziché aggiungere i due termini di ricerca.
● Se il modulo non dispone di un elemento aggiuntivo del modulo Visualizza una stringa di ricerca associata a una tabella (la proprietà Source del componente aggiuntivo dell'elemento del modulo) che visualizza un elenco dinamico, quindi premendo la combinazione di tasti Ctrl+F apre la finestra di ricerca.


Riso. 7. Finestra di dialogo Cerca

Se il modulo ha un elemento aggiuntivo del modulo Visualizzazione di una stringa di ricerca associata a una tabella (la proprietà Source dell'elemento aggiuntivo del modulo) che visualizza un elenco dinamico, è necessario utilizzare il comando di ricerca avanzata per aprire la finestra di ricerca.
● Quando si utilizza la finestra di dialogo di ricerca, tenere presenti i seguenti punti:
● L'apertura della finestra di dialogo di ricerca tramite la scorciatoia da tastiera fa apparire il valore della cella corrente nella riga Cosa cercare e il valore del pulsante di opzione Come cercare viene impostato su Corrispondenza esatta.

● L'apertura di una finestra di dialogo di ricerca iniziando direttamente a digitare una stringa di ricerca in un elenco dinamico fa sì che il valore del pulsante di opzione Come eseguire la ricerca sia impostato su Parte di una stringa e il testo digitato venga inserito nel campo Cosa cercare.

6. Ottenere i dati visualizzati dall'elenco dinamico

Quando si utilizzano elenchi dinamici, potrebbe essere necessario eseguire varie azioni sui dati attualmente visualizzati dall'elenco dinamico, tenendo conto dei filtri imposti e della ricerca applicata. Tali azioni includono: elaborazione delle informazioni visualizzate, ad esempio, ripubblicazione di documenti selezionati o impostazione di alcuni dettagli per oggetti selezionati, generazione di un elenco di oggetti disponibili (con design, ecc.), ad esempio, per la stampa o il salvataggio in un foglio di calcolo.
Per ottenere i dati visualizzati in un elenco dinamico, utilizzare GetDataCompositionSchemeExecutable() e
GetDataCompositionSettingsExecutable().
Esempio di recupero dati:

Schema = Items.List.GetExecutableDataCompositionSchema();
Impostazioni = Items.List.GetDataCompositionSettingsExecutable();
Generatore layout layout = Nuovo generatore layout layout dati();
LayoutLayout = LayoutComposer.Run(Schema, Impostazioni);
CompositionProcessor = NewDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout);
OutputProcessor = Nuovo OutputProcessorofDataCompositionResultIntoSpreadsheetDocument;
Restituisce OutputProcessor.Output(CompositionProcessor);

L'acquisizione di dati in una raccolta di valori (tabella o elenco di valori) avviene in modo simile.
L'ottenimento di dati da un elenco dinamico in questo modo ha una serie di funzionalità che devono essere prese in considerazione durante lo sviluppo di soluzioni applicative:
● Il seguente design della tabella non è supportato:
● Alternanza del colore delle linee;
● Immagine dell'intestazione;
● foto del seminterrato;
● Colore di sfondo del seminterrato;
● Colore del testo del piè di pagina;
● Carattere del piè di pagina;
● Posizione orizzontale nel seminterrato;
● Modalità password.
● L'aspetto condizionale specificato per il modulo gestito non è supportato;
● Quando si ordina una tabella gerarchica in ordine crescente, in base a un campo di tipo Collegamento, i record contenenti un collegamento nullo vengono sempre inseriti per primi.

Finalmente, il sogno di ogni "sette giocatori" si è avverato. Quante volte gli utenti del programma 7.7 hanno chiesto di effettuare una normale selezione di elementi. In modo che tu possa vedere i saldi, i prezzi e impostare i filtri. Ho dovuto escogitare vari trucchi, fino a scrivere componenti esterni. In 1C 8.2 sono apparse le liste dinamiche. Propongo di considerare di cosa si tratta e cosa possono darci in 1C 8.3.

Prendiamo come base una certa configurazione di test 1C: "Enterprise Accounting 3.0". Non faremo una selezione ora, basta aggiungere un altro modulo di selezione nel libro di riferimento "Nomenclatura" e renderlo temporaneamente quello principale:

Una volta creato, il sistema aggiungerà per impostazione predefinita un campo tabella con il tipo "Elenco dinamico" al modulo.

Andiamo alle sue proprietà e vediamo cosa c'è.

Prima di tutto, siamo interessati alla casella di controllo "Richiesta arbitraria". È lui che ci rivelerà tutti i vantaggi di un elenco dinamico. Avremo l'opportunità di scrivere la nostra query e con i parametri. Seleziona la casella e fai clic sul collegamento "Apri":

Si aprirà una finestra con un codice pronto per . Finora, tutti i campi della directory "Nomenclature" sono semplicemente elencati lì.

Ricevi gratuitamente 267 videolezioni 1C:

Come puoi vedere, è presente un pulsante di chiamata "" e una casella di controllo che consente di modificare dinamicamente il contenuto dell'elenco. Cioè, quando un altro utente cambia qualcosa nella directory, cambierà anche nel nostro elenco. Inoltre, c'è una scheda Impostazioni, ma la toccheremo in seguito.

Query personalizzata nell'elenco dinamico

Innanzitutto, creiamo la query di cui abbiamo bisogno con saldi e prezzi. Più o meno così:

Scheda Impostazioni

E ora il più delizioso! Vai alla scheda "Impostazioni". E vediamo subito che nella prima scheda possiamo effettuare qualsiasi selezione per qualsiasi campo della richiesta:

Impostazione a livello di codice dei parametri di query in un elenco dinamico 1C 8.3

Non dimenticare che abbiamo due parametri nella richiesta: "Periodo" e "Tipo di prezzo". Dobbiamo passarli alla richiesta, altrimenti si verificherà un errore.

Scriviamo questi parametri nei parametri del modulo e aggiungiamo le seguenti righe nel modulo del modulo:

&OnServerProcedure OnCreateOnServer(Failure, StandardProcessing) Elenco. Opzioni. SetParameterValue("Periodo", Parametri. Data) ; Elenco. Opzioni. SetParameterValue("TipoPrezzo" , Parametri.TipoPrezzo) ; EndProcedures Home Note attraverso lo specchio

21/04/2014 Recupero dati elenco dinamico

Implementato nella versione 8.3.6.1977.

Abbiamo implementato la possibilità di ottenere facilmente e comodamente i dati visualizzati utilizzando un elenco dinamico.

Potresti aver bisogno dei dati dell'elenco dinamico per stamparlo in un formato "specifico" non standard. O per eseguire determinate azioni con loro. Ad esempio, invia una lettera a tutte le controparti che hai selezionato nell'elenco secondo alcuni criteri.

Inoltre, ci sono una serie di attività in cui l'utente, oltre all'elenco di elementi, desidera anche visualizzare i dati di riepilogo associati a questo elenco. Ad esempio, dopo aver selezionato le merci di un determinato gruppo di prodotti e di un determinato fornitore, desidera immediatamente vedere il numero totale di tali merci nel database.

L'elenco dinamico stesso non può fornirti queste informazioni. Lo scopo di un elenco dinamico è fornire una visualizzazione rapida di grandi quantità di dati. Pertanto, legge i dati in blocchi necessari per la visualizzazione su uno o due schermi. E "non sa nulla", ad esempio, della quantità totale di dati che deve leggere.

In generale, per ottenere le informazioni aggiuntive desiderate dall'utente, è necessario interrogare il database. Esattamente lo stesso di quello utilizzato nell'elenco dinamico.

Potresti farlo prima. Ma non è stato sempre facile. Dopotutto, oltre al testo della query originale, in base al quale funziona l'elenco dinamico, era necessario conoscere tutte le selezioni, gli ordinamenti e gli altri parametri che l'utente imposta in modo interattivo nella tabella che visualizza i dati.

Ora questo compito è facilmente risolvibile. La tabella dell'elenco dinamico ha due nuovi metodi:

  • GetExecutableDataCompositionSchema();
  • GetExecutableDataCompositionSettings().

Pertanto, ottieni lo schema di composizione dei dati stesso e, soprattutto, tutte le sue impostazioni, grazie alle quali l'utente vede l'elenco esattamente com'è. Tutto quello che devi fare è comporre il layout a livello di codice e inviarlo a una raccolta di valori (per l'elaborazione a livello di codice) o un foglio di calcolo (per la visualizzazione):

Di conseguenza, otterrai una struttura (o report) contenente colonne e righe visualizzate in una tabella elenco dinamica.

Il punto importante è che il layout e le impostazioni che si ottengono dalla tabella a elenco dinamico tengono conto, tra l'altro, della visibilità delle colonne e della ricerca applicata. Poiché le impostazioni sono ottenute separatamente, è possibile modificare la composizione dei campi per i propri scopi e ottenere, ad esempio, tutte le colonne dell'elenco e non solo quelle visibili all'utente.

Quando si esegue l'output su un foglio di calcolo, c'è un altro bel momento. In generale, l'aspetto del report corrisponderà all'aspetto della tabella dell'elenco dinamico al momento della ricezione dello schema e delle impostazioni. Compreso il design condizionale del tavolo. Avrai bisogno di alcune azioni aggiuntive solo se desideri trasferire anche la struttura condizionale del modulo nel rapporto.

Nel processo di finalizzazione delle configurazioni, ogni programmatore 1C incontra elenchi dinamici.
Un elenco dinamico è un oggetto di interfaccia utilizzato per visualizzare vari elenchi di oggetti di database o dati non di oggetto - voci di registro.
Ad esempio, un elenco dinamico viene utilizzato per visualizzare un elenco di elementi:

Per dimostrare le possibilità di un elenco dinamico, creiamo un'elaborazione esterna, aggiungiamo il modulo principale. Aggiungiamo al form un nuovo attributo con il tipo "Elenco dinamico". Andiamo alle sue proprietà e vediamo cosa c'è.
Siamo interessati alla proprietà "Richiesta personalizzata". L'abilitazione ci mostrerà tutte le possibilità di un elenco dinamico. Saremo in grado di scrivere una query utilizzando quasi tutte le funzionalità del linguaggio di query del sistema 1C: Enterprise. Seleziona la casella e fai clic sul collegamento "Apri":

Per impostazione predefinita, il nostro elenco visualizzerà un elenco di articoli con un saldo totale per tutti i magazzini. Per implementare un tale elenco, aggiungi la seguente query:


Come tabella principale, selezioneremo "Directory. Nomenclatura", questo ci consentirà di lavorare con l'elenco dinamico, come con l'elenco di nomenclatura: aggiungi, modifica, contrassegna per l'eliminazione di elementi della directory. Inoltre, l'impostazione della tabella principale rende disponibile la possibilità di lettura dinamica dei dati: ciò significa che la selezione verrà effettuata in porzioni, a seconda delle esigenze.
Successivamente, dobbiamo creare elementi del modulo per il nostro elenco:

Se proviamo a eseguire la nostra elaborazione in questo modulo, riceveremo un errore:


Per eliminarlo è necessario impostare il valore del parametro "Periodo". A tale scopo, è possibile utilizzare il metodo "SetParameterValue" della raccolta "Parameters" dell'elenco dinamico. Il metodo accetta due parametri:
. "Parametro" - Tipo: Stringa; DataCompositionParameter. Il nome del parametro o del parametro di composizione dei dati il ​​cui valore deve essere impostato;
. "Valore" - Tipo: Arbitrario. Il valore da impostare.
Può essere chiamato nel gestore "OnCreateOnServer" del modulo:

Hai una domanda, hai bisogno dell'aiuto di un consulente?


Diamo all'utente la possibilità di modificare il periodo di ricezione dei saldi. Per fare ciò, aggiungiamo l'attributo e l'elemento del modulo "Data" ad esso associato:


Nel gestore "OnChange" dell'elemento del modulo "Date", chiamare il metodo "SetParameterValue", passando come valore il valore dell'attributo associato. Allo stesso modo, cambieremo la procedura "Su CreationAtServer" del form. Poiché il metodo è disponibile sul client, non è necessario chiamare il server:


Ora, al variare della data, i saldi verranno aggiornati automaticamente:




Si supponga che gli utenti desiderino visualizzare i saldi correnti o le entrate previste. Consideriamo una delle opzioni di implementazione. Aggiungiamo un attributo del modulo booleano e un pulsante di opzione associato:


Quando si modifica il valore dell'interruttore, cambieremo il testo della richiesta. Per fare ciò, utilizzeremo il gestore di eventi "OnChange" dell'elemento del modulo "DisplayQuantityToReceipt". È necessario modificare la proprietà "QueryText" dell'elenco dinamico a seconda del valore dell'attributo. Poiché questa proprietà non è disponibile sul client, è necessaria una procedura di chiamata al server:


Il risultato delle modifiche apportate:



Implementato nella versione 8.3.10.2168.

Come sapete, un elenco dinamico è comodo e utile per visualizzare rapidamente elenchi di grandi dimensioni. È abbastanza flessibile, consentendoti di modificare la query standard e persino di creare la tua query complessa. Ciò consente di visualizzare diversi dati aggiuntivi nell'elenco correlato ai dati principali dell'elenco.

Tuttavia, questa versatilità ha anche un aspetto negativo. Il desiderio di "mostrare tutto in una volta" può portarti a complicare notevolmente la query. Di conseguenza, otterrai piani di esecuzione inefficienti e, di conseguenza, prestazioni lente durante la visualizzazione e lo scorrimento dell'elenco.

Inoltre, ci sono una serie di attività applicate in cui l'algoritmo per la selezione e la formattazione dei dati dell'elenco è piuttosto complicato. In questi casi, le possibilità di query arbitrarie e di stili condizionali semplicemente non sono sufficienti. Mi piacerebbe avere uno strumento più “gratuito” e più “preciso” che ti permetta di fare “qualsiasi cosa” e “solo dove ne hai bisogno”.

EventOnReceiveDataOnServer

Proprio per questi scopi, abbiamo implementato un nuovo gestore. Viene aggiunto all'estensione della tabella che visualizza un elenco dinamico.

Questo gestore viene chiamato sul server dopo che l'elenco dinamico è stato ricevuto e predisposto per la visualizzazione della porzione successiva di dati.

Una caratteristica importante è che il contesto del modulo non è disponibile in questo gestore. Si può operare solo con una raccolta di quelle righe della lista che vengono ricevute dal database, già selezionate e formattate secondo le impostazioni della lista dinamica.

Puoi modificare i dati in queste righe o applicare il tuo design alle celle. Sono disponibili opzioni di design come Colore di sfondo, Colore del testo, Font, Posizione orizzontale, Visibilità, Disponibilità, Schermo, Testo e Formato.

Inoltre, se necessario, è possibile visualizzare e analizzare una copia delle impostazioni complete dell'elenco dinamico. Ma non puoi modificare le impostazioni.

Il caso d'uso più semplice

Il modo più semplice per comprendere lo scopo di questo gestore è con un esempio. Un esempio è quello di mostrare i loro saldi dal registro di accumulazione nell'elenco delle merci. Quantità inferiore a qualche valore evidenziato in rosso.

Finora, questo compito veniva risolto da un join sinistro in una richiesta di elenco dinamico e una decorazione di elenco condizionale impostata nel configuratore.

Ora lo fa in questo modo. La query dell'elenco standard non è complicata, viene aggiunto solo un campo fittizio Resto.

E nel gestore OnReceiveDataOnServer() solo per le righe risultanti vengono calcolati i resti. E poi i piccoli resti sono evidenziati in rosso.

Ecco, con il metodo GetKeys(), ottieni le loro chiavi (riferimenti) dalla raccolta di righe dell'elenco dinamico e passi queste chiavi alla query resto.

Quindi, quando si ignorano i risultati della query, si ottengono le righe desiderate per chiave, nella colonna Resto inserire un valore e impostare l'aspetto di quel campo, se necessario.

Di conseguenza, l'utente vede il seguente elenco:

Qual è il vantaggio di questa opzione?

Innanzitutto, la query dell'elenco rimane semplice. Oppure non rimane semplice, ma il numero di connessioni in esso contenute diminuisce. E questo significa che per lui, con un alto grado di probabilità, verrà costruito un buon piano.

In secondo luogo, l'acquisizione del resto nel gestore verrà eseguita una sola volta, mentre la richiesta dell'elenco può essere eseguita più volte (a seconda delle impostazioni dell'elenco e dello script di paging).

E, in terzo luogo, il nuovo gestore viene eseguito dopo che i dati principali sono stati ricevuti dal database e ha superato il controllo dei diritti. Ciò significa che in alcuni scenari, il recupero dei dati correlati nel gestore può essere eseguito in modalità privilegiata, senza verificare i diritti. Questo velocizza l'elenco.

Restrizioni sui campi modificabili e aggiunti

Il fatto che sia possibile modificare i valori dei campi dell'elenco nel gestore è una caratteristica che dovrebbe essere sempre presa in considerazione.

Se non prendi misure aggiuntive, l'utente potrebbe essere molto sorpreso dai risultati del raggruppamento, ordinamento o selezione (compresa la ricerca) per quei campi che hai modificato. Dopotutto, queste azioni verranno eseguite sui dati iniziali ricevuti dalla richiesta e non sui dati che l'utente vede.

Pertanto, ogni volta che modifichi i valori dei campi, ricorda di escluderli dal raggruppamento, dall'ordinamento e dal filtraggio. Abbiamo implementato tre nuovi metodi appositamente per questo scopo.

Inoltre, in alcuni scenari può avere senso evidenziare visivamente tali colonne nella tabella in modo che gli utenti possano vedere che queste colonne sono "speciali", non come tutti gli altri.