Essere in un gruppo secondo la gerarchia 1C 8. L'operatore “in gerarchia” nella richiesta. Ottenere tutti i genitori di un elemento

Ildarovich 6489 16.11.12 18:24 Attualmente in tema

()Vladimir! Sono felice che tu abbia prestato attenzione all'articolo, soprattutto perché sei stato uno dei primi a vedere (e apprezzare) questa tecnica nella discussione di due anni fa "È realistico scrivere una query complicata". Non mi è venuta in mente una domanda interessante da solo, ma l'ho vista sul forum. L'autore della domanda è Stanislav Sheptalov. Successivamente: il 24/10/12 lo stesso (appena notato questo, poiché il soprannome è diverso) partecipante al forum ha posto una domanda simile, ma in applicazione alla gerarchia. Si scopre che il problema PRATICO è stato risolto. Inoltre, secondo l'approccio “scientifico”, ho esaminato i problemi pratici in cui questa tecnica potrebbe essere applicata. Trovati altri 7 problemi. 5 - in questo articolo. Tra questi c'è il problema dei cicli nelle specifiche, che in precedenza avevo promesso di risolvere Ish_2 con una query. Penso che Ish_2 sarà in grado di convincerti della rilevanza di questo compito: ci ha dedicato molto tempo. La soluzione è breve: poche righe, quindi estremamente chiare, formulate in modo non procedurale, attraverso un'esigenza di risultato. Ebbene, negli articoli e sul forum sono stati riscontrati altri problemi e per essi sono state proposte soluzioni più ingombranti. Quindi aspettiamo un po' per vedere quanto spesso verrà applicato. Questo è esattamente il tipo di feedback che mi aspetto, da coloro che ci proveranno.
A proposito, il fatto che questo ramo della matematica non sia lontano dalla pratica e sia necessario ai contabili è evidenziato dal modulo generale "Adeguamento dei costi" in BP2, con cui stiamo attualmente armeggiando (funzionamento instabile della richiesta standard). Qui stiamo parlando di interrompere i cicli del grafico del movimento degli oggetti e di costruire uno spanning tree.
Ora sulla struttura del database "per un compito specifico". È stata posta la domanda sull'implementazione dell'attività in 1C e, pertanto, l'attività è stata risolta in 1C. Se ti chiedessero "quale autobus puoi prendere per andare in biblioteca" e rispondessi che è meglio volare su un dirigibile, semplicemente non verresti capito (forse tranne quelli che sono bloccati nel traffico di Mosca ). Inizialmente il metodo funzionava in un linguaggio completamente diverso.
In generale, non potrò convincerti se pensi che l'architettura della piattaforma 1C non sia buona. Posso solo esprimere la mia opinione. Sviluppare uno schema di database da zero per un'attività specifica è costoso. Se lo confrontiamo con la costruzione: 1C sono grattacieli a pannelli - alloggi economici - un mezzo di automazione di massa - in condizioni anguste, ma senza offesa. Le singole organizzazioni possono assumere Norman Foster per implementare con precisione le loro esigenze. Il resto deve utilizzare progetti economici prodotti in serie: DBMS relazionali con un modello di oggetti rigido. Inoltre, conosco la triste esperienza di utilizzo di Cashe in diversi progetti. Agli occhi di uno sviluppatore, tutto non sembra così roseo come in teoria. Il modello a oggetti 1C resiste alla prova del tempo: “vasti territori sono edificati e abitati”. Inoltre, si sta sviluppando. Recentemente è emersa la tecnologia delle fonti di dati esterne. E se alcune attività richiedono una maggiore reattività (ad esempio, i sistemi di fatturazione), ora puoi connettere senza problemi 1C con un altro DBMS. Ad esempio, questo è il modo in cui scambiamo con ERP importati.
Tuttavia, non vorrei deviare la conversazione dall'argomento principale: il lavoro delle tecniche proposte in compiti PRATICI dettagliati.

Cos'è una directory 1C e perché è necessaria? La directory memorizza informazioni condizionatamente permanenti, ad es. informazioni che rimangono pressoché invariate per un lungo periodo di tempo. Ad esempio, la directory "Nomenclatura" contiene un elenco di beni venduti o prodotti. Inoltre, una directory può contenere molte proprietà che descrivono un elemento di directory.

Se prendiamo il sesso di una persona per il confronto, l'elenco è limitato e non viene modificato, quindi un'enumerazione è più adatta a questo scopo.

Dopo aver creato una nuova directory, vedremo la seguente immagine.

Diamo un'occhiata a tutti i suoi segnalibri.

Di base

Qui vengono indicati il ​​nome (identificatore nel database) e il sinonimo (nome utente della directory). Un commento facoltativo è quello che può spiegare lo scopo della directory o descriverne le caratteristiche.

Gerarchia

In questa scheda è possibile configurare la profondità di annidamento degli elementi della directory. Utilizzando questa impostazione è conveniente differenziare e dettagliare gli elementi secondo alcuni criteri. Ad esempio, i prodotti "Armadi" si trovano in un gruppo e i prodotti "Tavoli" in un altro. Per impostazione predefinita, una volta creata, la directory presenta elenco di elementi. Se selezioni la casella di controllo Directory gerarchica, ogni elemento può essere subordinato a un altro elemento (gruppo). Di seguito sono riportate le opzioni per personalizzare questo segnalibro e modificare la visualizzazione in modalità personalizzata.

Tipo di gerarchia:

Gerarchia di gruppi ed elementi

Con questa impostazione gli elementi possono essere nidificati solo in gruppi (cartelle).

Qui, come puoi vedere, tutti gli elementi e i gruppi hanno le stesse icone e qualsiasi elemento può essere nidificato.

Posiziona i gruppi in alto

Quando questa casella è selezionata, i gruppi saranno sempre in alto, altrimenti verranno organizzati in ordine, ad esempio, in questo modo:

Limitare il numero di livelli gerarchici

Se la casella di controllo non è selezionata qui, l'annidamento è illimitato.

Se la casella di controllo è selezionata, è possibile specificare il numero di livelli di seguito.

Proprietari

Sul segnalibro proprietari possono essere indicate altre directory in relazione alle quali questa è subordinata. Il diagramma delle relazioni delle directory subordinate è simile al diagramma delle relazioni di una directory gerarchica, solo che qui un'altra directory funge da genitore ed è chiamata proprietaria. Nelle configurazioni tipiche, un buon esempio è la subordinazione della directory "Accordi" alla directory "Controparti", perché Non può esistere un accordo che non appartenga ad alcuna controparte.

Il campo "Elenco dei proprietari di directory" specifica l'elenco delle directory che possiedono gli elementi di questa directory.

In basso nel campo “Utilizzo della subordinazione” è indicato a cosa saranno subordinati gli elementi di questa directory.

Come scoprire a livello di codice se una directory è gerarchica o meno

Per fare ciò è necessario fare riferimento ai metadati

Questa è HierarchicalDirectory = Metadata.Directories.Counterparties.Hierarchical;

Continua...

Le directory 1C sono un oggetto specializzato dell'albero dei metadati che serve a memorizzare informazioni di riferimento statiche. Ad esempio, nelle configurazioni tipiche è possibile visualizzare le seguenti visualizzazioni: , Nomenclatura, Dipendenti, Cespiti, ecc. Le informazioni nelle directory, di regola, non cambiano spesso. Le directory vengono successivamente utilizzate in quasi tutti gli oggetti contabili come sezione contabile o informazioni di riferimento.

Di seguito esamineremo l'impostazione e la progettazione di una directory dal configuratore utilizzando la directory "Nomenclatura" come esempio.

Scheda Base

La scheda "Base" specifica il nome, il sinonimo, la rappresentazione dell'oggetto e la descrizione dello scopo.

Scheda "Gerarchia directory".

Qui viene stabilita la gerarchia della directory.

La gerarchia in 1C 8.3 è di due tipi: “ gruppi ed elementi" E " elementi". La differenza è che nel primo caso solo una cartella (gruppo) può essere un genitore (cartella) e nel secondo caso anche un elemento può essere un genitore.

"Posiziona i gruppi in primo piano": la bandiera è responsabile della visualizzazione dei gruppi sotto forma di elenco.

Inoltre nelle impostazioni è possibile limitare il numero di gruppi nella gerarchia delle directory utilizzando l'impostazione appropriata.

Scheda Proprietari

Una directory può essere subordinata a un'altra directory. Ciò significa, dal punto di vista della configurazione di 1C 8.3, che l'attributo “Proprietario” diventa obbligatorio per l'elemento subordinato. Un esempio di tale connessione tra elenchi nelle configurazioni standard “Nomenclatura - Unità di misura”, “Controparti - Contratti di appaltatori”.

Il proprietario della directory può anche essere i seguenti oggetti di metadati: , .

Scheda Dati

Ottieni 267 lezioni video su 1C gratuitamente:

La scheda più importante dal punto di vista del programmatore. Contiene i dettagli della directory.

La directory contiene una serie di dettagli standard che non vengono modificati dal programmatore 1C 8.2; un elenco di essi può essere visualizzato facendo clic sul pulsante "Dettagli standard":

Mi soffermerò su ciascuno in modo più dettagliato:

  • Questo gruppo— un attributo di tipo booleano, che indica se si tratta di un gruppo o di un elemento. Disponibile solo nella directory gerarchica. Nota, il valore di questo attributo non può essere modificato in 1C: modalità Enterprise.
  • Codice— oggetti di scena, tipo numero o stringa (solitamente una stringa). Un numero assegnato automaticamente dal sistema. Tipicamente calcolato come (codice precedente + 1). Consiglio di utilizzare il tipo stringa, perché l'ordinamento dei valori numerici non funziona come previsto. Può essere utilizzato come presentazione di directory in un elenco e nei campi di input. Solitamente utilizzato per cercare un elemento quando si immette una stringa. Se è necessario rimuovere il campo Codice, inserire zero nella lunghezza della riga.
  • Nome— dettagli obbligatori, tipo di stringa. La lunghezza massima della riga è di 150 caratteri. Può essere utilizzato come presentazione di directory in un elenco e nei campi di input. Solitamente utilizzato per cercare un elemento quando si immette una stringa. Se è necessario rimuovere il campo Nome, immettere zero nella lunghezza della riga.
  • Genitore— un attributo del tipo DirectoryLink.<ИмяТекущегоСправочника>. Disponibile solo nella directory gerarchica. Indica il genitore superiore nella gerarchia. Se l'elemento o il gruppo si trova alla radice della directory, viene specificato il valore Directory.<ИмяТекущегоСправочника>.EmptyLink.
  • Proprietario— collegamento all'elemento proprietario dell'elemento della directory corrente (gruppo). Disponibile solo nella directory subordinata 1C.
  • FlagEliminazione— oggetti di scena di tipo Booleano. Responsabile della visualizzazione del “segno di cancellazione” nel sistema. Un elemento contrassegnato per l'eliminazione è considerato inutilizzabile, ma su di esso potrebbero rimanere vecchi movimenti di documenti.
  • Collegamento— campo di tipo stringa. Questo attributo memorizza un identificatore di oggetto univoco: GUID. Ciò che vediamo nel sistema in un display visivo chiamato “link” è solo una rappresentazione di un oggetto. Non può essere modificato.
  • Predefinito— tipo booleano, mostra se l'elemento è predefinito, ne parleremo più avanti. Non può essere modificato.

La scheda “Dati” indica anche la rappresentazione della directory nel sistema; prima della versione 8.2.16 la rappresentazione poteva essere solo Codice o Nome. Nelle versioni recenti della piattaforma (a partire dalla 8.3), la vista può essere descritta in modo indipendente nel modulo di gestione utilizzando l'handler “ViewReceivingProcessing”.

Scheda Numerazione

Qui è possibile specificare le impostazioni della rubrica relative alla numerazione. Si consiglia di utilizzare la numerazione automatica. Il controllo di unicità è un flag che aiuta, se necessario, a rendere il codice univoco. Se con il flag impostato si tenta di scrivere un elemento di directory con codice non univoco, in 1C verrà visualizzato il messaggio “Il codice directory è diventato non univoco”.

Serie codici - determina come numerare la rubrica; è possibile inserire la numerazione della rubrica in base al proprietario. Ad esempio, la controparte "Horns and Hooves" avrà la propria numerazione dei contratti: "1, 2, 3", ecc.

Scheda Moduli

I moduli per la directory sono descritti qui. Se la configurazione viene avviata sia in modalità normale che gestita, per impostazione predefinita saranno presenti due schede con moduli: "principale" e "avanzata", diverse per le applicazioni normali e gestite.

Questa pagina ha una caratteristica importante della directory: "". Questa è una funzione molto comoda di 1C 8, che ti consente, durante la compilazione dei dati nel campo di immissione, di non entrare nella directory, ma di digitarne il nome, il codice, ecc. e seleziona l'elemento desiderato dall'elenco a discesa. Sembra questo:

Altra scheda

Nella scheda puoi accedere rapidamente ai moduli principali della directory: il modulo oggetto e il modulo gestore.

È inoltre possibile definire un elenco di elementi di directory predefiniti nella pagina. Si tratta di elementi che non possono essere eliminati in modalità Enterprise. Gli elementi predefiniti sono accessibili direttamente nel configuratore per nome, ad esempio: Directory.Nomenclatura.Servizio.

Questa scheda determina anche la modalità di blocco: automatica o controllata. Utilizzo della ricerca full-text, nonché informazioni di riferimento sulla directory, disponibili in 1C: modalità Enterprise.

Il design "IN HIERARCHY" nelle query 1C:Enterprise 8.x consente di ottenere elementi subordinati di un oggetto di configurazione gerarchica in base a una determinata selezione. Oggi nell'articolo vedremo un esempio del suo utilizzo, nonché le azioni della piattaforma sul lato DBMS e il suo impatto sulle prestazioni.

Utilizzo

Diamo un'occhiata a un semplice esempio di utilizzo della costruzione "IN HIERARCHY". Quando si esegue la richiesta successiva, per il valore passato della variabile "Link" verranno ottenuti gli elementi subordinati della directory gerarchica "Prodotti".

Testo della query = "SELEZIONA | Prodotti . Collegamento,| Merce . codice venditore |DA| Direttorio . Prodotti COME Prodotti|DOVE | Merce . Collegamento IN GERARCHIA(& Collegamento)"

Nel database dei test, la directory "Prodotti" contiene i seguenti dati dei test:

Naturalmente l'immagine non mostra tutte le voci della directory. Lo screenshot mostra solo la struttura di archiviazione dei dati nella directory gerarchica. La tabella delle directory memorizza 10 gruppi di livello superiore, ciascuno dei quali contiene 5 gruppi nidificati con 200 elementi ciascuno.

Torniamo alla richiesta di prova. Passiamo il collegamento al gruppo "Gruppo - 1" al parametro "&Link" (vedi screenshot sopra). Quindi il risultato della query sarà simile a questo:

Come possiamo vedere, la richiesta ha restituito un collegamento al gruppo principale stesso (passato come parametro), nonché gruppi nidificati con gli elementi al loro interno. Pertanto, l'uso della costruzione "IN HIERARCHY" consente di ottenere comodamente dati gerarchicamente subordinati.

Sintassi del linguaggio di query 1C:Enterprise SQL classico molto simili per certi aspetti. Ma per l'espressione “IN HIERARCHY” non esiste un analogo nel linguaggio di query SQL poiché, ad esempio, per l'espressione del linguaggio di query della piattaforma “B” esiste un operatore SQL simile “IN”. Pertanto, è interessante il lavoro della piattaforma con il DBMS quando si utilizza questo operatore.

Dietro le quinte

Quindi iniziamo. Ad esempio, utilizzeremo la query scritta in precedenza per la directory "Prodotti". Analizzeremo le azioni della piattaforma per due situazioni:

  1. Passeremo il gruppo di livello superiore “Gruppo 1” come parametro “&Link” (come abbiamo fatto in precedenza).
  2. Nel parametro passeremo un collegamento al gruppo "Gruppo 1 - 1", nidificato nel gruppo di livello superiore "Gruppo 1".

Ora, in ordine. Nel primo caso la piattaforma eseguirà le seguenti azioni sul server SQL:

1. Innanzitutto viene eseguita una query SQL per ottenere un collegamento al gruppo di directory passato come parametro e a tutti i gruppi subordinati. Il risultato viene inserito nella tabella temporanea "#tt1".

2. Nella seconda fase, la stessa query viene eseguita due volte:

Lo screenshot contiene commenti dettagliati sul testo della query SQL. In breve, la query consente di selezionare elementi subordinati per i gruppi a cui si fa riferimento in una tabella temporanea. La domanda rimane: "Perché la query viene eseguita due volte?" La risposta qui è semplice: in primo luogo, la query riceve elementi subordinati per i gruppi di primo livello che sono già contenuti nella tabella temporanea (vedi punto 1). La seconda query recupera quindi i sottoelementi per i sottogruppi di secondo livello. Poiché al terzo livello della gerarchia non è presente alcun gruppo di directory, questa query non viene più eseguita.

Nel nostro caso, la seconda query restituirà un risultato vuoto, poiché non ci sono elementi subordinati per i record situati al 3° livello della gerarchia (non ci sono gruppi lì).

3. Per ottenere il risultato finale della query, la piattaforma genera la seguente query SQL:

Il risultato di questa particolare richiesta può essere ulteriormente elaborato da algoritmi nel linguaggio integrato della piattaforma. Pertanto le registrazioni nella tabella temporanea "#tt1" vengono utilizzate per impostare la condizione di campionamento dalla tabella di riferimento "_Reference41".

4. Nell’ultimo passaggio, la piattaforma 1C:Enterprise 8.x elimina la tabella temporanea “#tt1”, poiché non verrà più utilizzata in futuro.

Questo completa il processo di esecuzione dell'operatore “IN HIERARCHY”. Permettetemi di ricordarvi che la sequenza di azioni considerata sul server SQL è stata eseguita quando abbiamo passato un collegamento al gruppo di livello superiore "Gruppo - 1" a una richiesta sul lato della piattaforma. Ma come si comporterà la piattaforma se passiamo un link al gruppo di secondo livello “Gruppo - 1 - 1” come parametro “&Link”? Tutto avverrà allo stesso modo, tranne il seguente punto: sopra, nella seconda fase di esecuzione delle query SQL da parte della piattaforma, è stato scritto che la query per ottenere elementi subordinati è stata eseguita due volte - nel caso di acquisizione di elementi subordinati per nel gruppo "Gruppo - 1 - 1" non è così. La richiesta verrà eseguita una sola volta.

Il fatto è che il numero di richieste per ottenere elementi subordinati dipende dal numero di gruppi nella gerarchia. In altre parole, se il livello della gerarchia degli elementi contiene almeno un gruppo, allora il file richiesta dal punto 2.

Impatto sulle prestazioni

L'uso errato di qualsiasi operatore in una query può comportare prestazioni del sistema non ottimali. L'operatore in esame “IN HIERARCHY” non fa eccezione. Deve essere utilizzato con cautela poiché complica notevolmente l'algoritmo per l'esecuzione delle query SQL sul database e quindi aumenta il carico sul server DBMS.

Lascia che ti faccia un esempio di una query non ottimale che può portare alle tristi conseguenze sopra menzionate:

SELEZIONA i prodotti. Collegamento dalla directory. Prodotti AS Prodotti DOVE (Prodotti. Link IN GERARCHIA (& Link) O Prodotti. Link IN GERARCHIA (& Link1) O Prodotti. Link IN GERARCHIA (& Link2) )

Come puoi immaginare, la richiesta porterà alla generazione di numerose query SQL, che si tradurranno in una diminuzione delle prestazioni del sistema informativo.

Trai le tue conclusioni!

Sta a te trarre le conclusioni. Dico solo che l'operatore “IN HIERARCHY” viene utilizzato dalla piattaforma per il sistema di composizione dei dati quando le condizioni di selezione includono “IN GRUPPO”, “IN GRUPPO DALLA LISTA” e altre. Penso che non sia necessario spiegare che con manipolazioni errate gli utenti possono impostare selezioni molto complesse e aumentare più volte il carico sul server 1C e sul DBMS. Modifichiamo le impostazioni solo per gli utenti esperti.

E ovviamente, quando scrivi i tuoi meccanismi, presta attenzione all'operatore "IN HIERARCHY". Molto conveniente da un lato e pericoloso dall'altro.

Questa sezione mostra esempi di risoluzione di problemi tipici quando si lavora con directory gerarchiche.

Ottenere elementi di una directory gerarchica che sono subordinati a un dato gruppo

Per ottenere elementi subordinati di una directory gerarchica, il linguaggio di query fornisce il costrutto IN HIERARCHY. Esempio di utilizzo IN GERARCHIA:


SCEGLIERE
Nomenclatura.Codice,
Nomenclatura.PrezzoAcquisto
DA

In questo esempio, verranno ottenuti tutti i record della directory Nomenclature situata nel gruppo &Group, incluso lo stesso, i suoi gruppi subordinati e gli elementi appartenenti ai gruppi subordinati.

Se siamo interessati solo agli elementi e ai gruppi che si trovano direttamente in un dato gruppo, allora possiamo ottenere tali elementi impostando una condizione nel campo Parent. Esempio:


SCEGLIERE
Nomenclatura.Codice,
Nomenclatura Nome AS Nome,
Nomenclatura.PrezzoAcquisto
DA
Directory.Nomenclature AS Nomenclatura

DOVE
Nomenclatura.Parent = &Gruppo

Questa query selezionerà i gruppi e gli elementi subordinati al gruppo con il collegamento &Gruppo.

Verifica della presenza di elementi subordinati di un elemento di directory

Per verificare la presenza di record subordinati di un elemento di directory, è possibile utilizzare una query simile a quella presentata:

In questo esempio, il riferimento all'elemento per il quale si desidera verificare la presenza di elementi secondari viene scritto nel parametro di query Parent. Dopo aver eseguito una query di questo tipo, è necessario verificare la presenza di vuoto nel risultato. Se il risultato non è vuoto, sono presenti record subordinati. Altrimenti - no. Esempio:


Se Request.Execute().Empty() Allora
Report("Nessuna voce");
Altrimenti
Report("Record disponibili");
finisci se;

Ottenere tutti i genitori di un elemento

Il linguaggio di query non fornisce alcun mezzo speciale per recuperare tutti i genitori di un elemento. È possibile utilizzare i totali gerarchici per completare l'attività, ma l'ottenimento dei totali gerarchici è ottimizzato per la creazione di totali per un numero elevato di record e non è del tutto efficace per ottenere gli elementi principali di un singolo elemento. Per recuperare in modo più efficiente tutti i record principali di un elemento, si consiglia di scorrere i relativi genitori in piccole porzioni. Esempio:


ElementoArticoloCorrente = ElementoArticolo;

Interrogazione = Nuova interrogazione("SELECT
| Nomenclatura.Genitore,
| Nomenclatura.Parent.Parent,
| Nomenclatura.Parent.Parent.Parent,
| Nomenclatura.Parent.Parent.Parent.Parent,
| Nomenclatura.Parent.Parent.Parent.Parent.Parent
|DA
| Directory.Nomenclature AS Nomenclatura
|DOVE
| Nomenclature.Link = &CurrentNomenclatureElement";

Mentre il Ciclo della Verità
Request.SetParameter("CurrentItemItem", CurrentItemItem);
Risultato = Query.Esegui();
Se Result.Empty() Allora
Interrompere;
finisci se;
Selezione = Risultato.Seleziona();
Selezione.Avanti();
Per ColumnNumber = 0 per Result.Columns.Quantity() - 1 Loop
ElementoArticoloCorrente = Selezione[NumeroColonna];
Interrompere;
Altrimenti
Rapporto(ArticoloArticoloCorrente);
finisci se;
FineCiclo;

Se CurrentItemItem = Directories.Nomenclature.EmptyLink() Allora
Interrompere;
finisci se;
FineCiclo;

In questo esempio, tutti i genitori del collegamento registrato nella variabile ElementNomenclature vengono visualizzati nella finestra del messaggio di servizio. Nel ciclo vengono selezionati 5 link principali.

Se il numero di livelli nella directory è limitato e piccolo, è possibile ottenere tutti i genitori con una richiesta senza loop.

Visualizzazione di una directory gerarchica in un report

Per visualizzare una directory gerarchica in un report preservando la gerarchia, è necessario utilizzare una query simile alla seguente:


SCEGLIERE
Nomenclatura.Codice,
Nomenclatura Nome AS Nome,
Nomenclatura.PrezzoAcquisto
DA
Directory.Nomenclature AS Nomenclatura
ORDINA PER
Nome GERARCHIA

Questa query seleziona tutti i record dalla directory e li dispone in base alla gerarchia. Il risultato verrà ordinato per nome, tenendo conto della gerarchia.

Affinché i gruppi di directory siano posizionati sopra gli elementi, è necessario sostituire la clausola ORDER BY in questa richiesta con la seguente:


ORDINA PER
Nomenclatura. Questa è la GERARCHIA di gruppo,
Nome

Il risultato sarà comunque ordinato gerarchicamente, ma i gruppi appariranno sopra gli elementi.

È inoltre possibile sostituire l'offerta ORDER BY con l'opzione AUTO ORDER. In questo caso, il risultato verrà ordinato in base alle impostazioni della directory, ad es. se la directory indica che i gruppi devono essere posizionati sopra gli elementi, allora verranno posizionati sopra.

È anche possibile ottenere la struttura gerarchica della directory utilizzando i risultati.


SCEGLIERE
Nomenclatura.Codice,
Nomenclatura Nome AS Nome,
Nomenclatura.PrezzoAcquisto

DA Directory.Nomenclature AS Nomenclatura

DOVE
(Nomenclatura.QuestoGruppo = FALSO)

ORDINA PER Nome

Ottenere i totali per gerarchia

Per ottenere i totali per gerarchia in una query, è necessario specificare la parola chiave HIERARCHY nella clausola SOFTWARE TOTAL dopo aver specificato il campo in base al quale verranno calcolati i totali. Un esempio di report "Fatturato articoli" con acquisizione dei totali per gerarchia:


SCEGLIERE

DA

GERARCHIA della nomenclatura

A seguito di tale richiesta verranno calcolati i totali non solo per ogni articolo, ma anche per i gruppi a cui appartiene questo o quell'articolo.

Nel caso in cui non abbiamo bisogno dei totali per gli elementi, ma solo dei totali per i gruppi, dobbiamo utilizzare la costruzione SOLO GERARCHIA nei totali. Esempio:


SCEGLIERE
Contabilità per NomenclatureFatturato.Nomenclature AS Nomenclatura,
Contabilità per la nomenclaturaFatturato.Nomenclatura.Presentazione,
Contabilità per la nomenclaturaFatturato.QuantitàFatturato AS QuantitàFatturato
DA
Registro dell'accumulazione.Nomenclatura Contabilità.Fatturato COME Nomenclatura ContabilitàFatturato
RISULTATI IMPORTO (Quantità Fatturato) PO
SOLO GERARCHIA della nomenclatura

Il risultato di questa query sarà il totale dei record solo per i gruppi di articoli.