Casa / Facebook / Funzioni del linguaggio espressivo del sistema di composizione dei dati. Funzioni del linguaggio di espressione del sistema di composizione dei dati Implementazione dell'attività utilizzando le funzioni SKD Array e ConnectRows

Funzioni del linguaggio espressivo del sistema di composizione dei dati. Funzioni del linguaggio di espressione del sistema di composizione dei dati Implementazione dell'attività utilizzando le funzioni SKD Array e ConnectRows

Questo metodo, mi sembra, ha un aspetto negativo, ma funziona, ma il meno è grande. Facciamo un esempio: nella configurazione è presente un documento "Ricevuta merce" con una parte tabellare "Merci", è necessario visualizzare nel report i documenti e i nomi delle merci ricevute per ciascun documento.

Creiamo un report, aggiungiamo uno schema di layout dei dati di base, aggiungiamo un set di dati di tipo "query" al sistema di controllo degli accessi e generiamo una semplice richiesta (vedi Figura 1).

Figura 1. Query sul set di dati
Nella scheda "Campi calcolati", aggiungere un campo calcolato denominato TabularPart e specificare una stringa vuota nella colonna Espressione (vedere Figura 2).
Il nostro campo calcolato verrà utilizzato come risorsa, quindi nella scheda "Risorse" impostiamo l'espressione di raggruppamento: ConnectRows(Array(Products.Nomenclature),""). Indichiamo inoltre che questa risorsa deve essere calcolata utilizzando il campo Link (vedi Figura 3).
Risultato del rapporto:
Lo svantaggio è l'uso del raggruppamento; nel nostro caso il raggruppamento viene eseguito dall'attributo Link, altrimenti non funzionerà. La presenza di un raggruppamento impone alcune restrizioni sull'impostazione dell'output dei dati (vedere Figura 4).

2) Chiamare la propria funzione da un modulo comune.

Un modo semplice e chiaro, l'unica difficoltà è trovare un modulo comune adatto o crearne uno nuovo per scrivere la propria funzione :). Utilizzando il collegamento passato al documento "Entrata Merci", la funzione riceverà righe dalla parte tabellare del documento e genererà una riga con le informazioni sulla merce ricevuta. Iniziamo l'implementazione.

Creiamo un report, aggiungiamo uno schema di layout dei dati di base, aggiungiamo un set di dati di tipo "query" al sistema di controllo degli accessi e generiamo una semplice richiesta (vedi Figura 6).


Figura 6. Query sul set di dati
Creiamo un modulo comune _Demo Lavora CON Reports e scriviamo la funzione di esportazione Ottieni elenco di prodotti per Report(). Vedere il codice funzione di seguito.
Nella scheda “Campi calcolati”, aggiungiamo un campo calcolato chiamato TabularPart e nella colonna Espressione indichiamo una chiamata di funzione dal modulo generale (vedi Figura 2):
_DemoWorking WITH Reports. Ottieni elenco dei prodotti per il report (Link)

Andiamo alla scheda "Impostazioni" e creiamo un'impostazione per l'output dei dati: questo sarà un record dettagliato (vedi Figura 8).
Risultato del rapporto:

Scarica il rapporto di esempio

Cosa devi sapere quando usi questo metodo:
1) L'espressione del motore di composizione dei dati può contenere chiamate a funzioni di moduli di configurazione comuni globali. Per esempio:
Nome abbreviato(Link, Data, Numero)
2) Quando si genera un report a livello di programmazione, l'uso delle funzioni dei moduli comuni è consentito solo se è specificato il parametro corrispondente del processore di composizione dati (4° parametro):
CompositionProcessor = nuovoDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout, DecryptionData, True);
3) Le funzioni dei moduli comuni non possono essere utilizzate nelle espressioni di campi personalizzati.
4) Se viene generata un'eccezione durante la generazione di un report che indica una funzione di un modulo comune, controllare il contesto di esecuzione del modulo (vedere Figura 9).

Descrizione delle funzioni utilizzate

ConnectRows(Valore, ItemSeparator, ColumnSeparator)- progettato per combinare le stringhe in un'unica linea.
  • Valore: espressioni che devono essere combinate in un'unica riga. Se si tratta di un Array, gli elementi dell'array verranno combinati in una stringa. Se si tratta di una ValueTable, tutte le colonne e le righe della tabella verranno combinate in una riga;
  • Separatore di elementi: una stringa contenente testo da utilizzare come separatore tra gli elementi dell'array e le righe della tabella dei valori. Predefinito: carattere di avanzamento riga;
  • Separatori di colonna: una stringa contenente testo da utilizzare come separatore tra le colonne della tabella dei valori. Predefinito "; ".
Array([Varie] Espressione)- puoi utilizzare una tabella di valori come parametro. In questo caso il risultato della funzione sarà un array contenente i valori della prima colonna della tabella dei valori, passati come parametro. Se un'espressione contiene una funzione Array, l'espressione viene considerata un'espressione aggregata. Se viene specificata la parola chiave Varie, l'array risultante non conterrà valori duplicati.

Ottieni l'elenco dei prodotti per il report (DocumentLink)- la funzione genera una riga con l'elenco delle merci in entrata.
// Opzioni:
// DocumentLink - DocumentLink.Ricevuta Merci - Documento "Ricevuta Merci".
// Valore di ritorno:
// String: una stringa con un elenco di prodotti.
La funzione ottiene l'elenco dei prodotti per l'esportazione del report (DocumentLink).

Elenco dei prodotti = "";

Per ogni riga PM dal ciclo DocumentLink.Products
Lista Prodotti = Lista Prodotti + Linea TC.Nomenclatura;
Elenco Prodotti = Elenco Prodotti + Simboli.PS;
FineCiclo;

Elenco dei prodotti restituiti;

EndFunction // Ottieni l'elenco dei prodotti per Report()

In questa breve nota voglio mostrare come è possibile riassumere valori a vari livelli di raggruppamento in un report utilizzando un sistema di composizione dei dati.
Come mostrato nell'immagine, solo a livello di raggruppamento "Gruppi di articoli", viene calcolata la risorsa "Ordine", che mostra quanto deve essere ordinato per il gruppo di articoli corrente in base a determinate condizioni:


Questo valore può essere calcolato solo a questo livello di raggruppamento, poiché non ci sono valori sopra o sotto da calcolare. Ad esempio, a livello di registrazioni dettagliate, non ci sono dati sulla quantità massima in un gruppo, perché questi dati sono validi solo per il gruppo nel suo insieme e non per i suoi singoli componenti.

Occorre quindi ora calcolare i totali dei suddetti raggruppamenti (“Magazzini”, “Tipologie di Magazzino”) ed il totale complessivo.
Per fare ciò, utilizzare la funzione CalculateExpressionWithGroupArray:
VALUTAZIONE EXPRESSIONWITHGROUPARRAY (EVALEXPRESSIONWITHGROUPARRAY)
Sintassi:
ValutaExpressionWithGroupArray(,)
Descrizione:
La funzione restituisce un array, ciascun elemento del quale contiene il risultato della valutazione di un'espressione per il raggruppamento in base al campo specificato.
Il compositore di layout, quando genera un layout, converte i parametri della funzione in termini di campi del layout di composizione dei dati. Ad esempio, il campo Account verrà convertito in DataSet.Account.
Il generatore di layout, quando genera espressioni per l'output di un campo personalizzato la cui espressione contiene solo la funzione CalculateArrayWithGroupArray(), genera l'espressione di output in modo che le informazioni di output siano ordinate. Ad esempio, per un campo personalizzato con l'espressione:

CalculateExpressionWithGroupArray("Importo(Importo Fatturato)", "Controparte")
Il generatore di layout genererà la seguente espressione per l'output:

ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)),Sum(DataSet.AmountTurnover)","DataSet.Account")","2")))

Opzioni:

Tipo: corda. L'espressione da valutare. Stringa, ad esempio Amount(AmountTurnover).

Tipo: corda. Espressioni di campi di raggruppamento: espressioni di campi di raggruppamento, separati da virgole. Ad esempio, Appaltatore, Parte.

Tipo: corda. Un'espressione che descrive la selezione applicata ai record di dettaglio. L'espressione non supporta l'uso di funzioni aggregate. Ad esempio, Eliminazione Flag = False.

Tipo: corda. Un'espressione che descrive la selezione applicata ai record di gruppo. Ad esempio, Importo(ImportoFatturato) > &Parametro1.
Esempio:

Massimo(CalculateExpressionWithGroupArray("Importo(ImportoFatturato)", "Controparte"));

Una descrizione dettagliata della sintassi della funzione può essere trovata su http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Ora, per il calcolo, duplichiamo il campo “Ordine”, con valori diversi “Calcola per...”, utilizzando le seguenti espressioni, notiamo che in ogni livello superiore vengono utilizzati i valori dei livelli inferiori ai raggruppamenti .

Di conseguenza, otteniamo la seguente costruzione:

Accedi al sito come studente

Accedi come studente per accedere ai materiali scolastici

Sistema di composizione dei dati 1C 8.3 per principianti: conteggio dei risultati (risorse)

Lo scopo di questa lezione sarà:

  • Scrivere un rapporto che visualizzi un elenco di prodotti (directory alimentare), il loro contenuto calorico e il gusto.
  • Raggruppa i prodotti per colore.
  • Informazioni sul riepilogo (risorse) e sui campi calcolati.

Crea un nuovo rapporto

Come nelle lezioni precedenti, apriamo il database " gastronomia"nel configuratore e crea un nuovo report tramite il menu" File"->"Nuovo...":

Tipo di documento - rapporto esterno:

Nel modulo di impostazione del report, scrivi il nome " Lezione3" e premi il pulsante " Aprire il diagramma di composizione dei dati":

Lasciare il nome dello schema predefinito e fare clic su " Pronto":

Aggiunta di una richiesta tramite il costruttore

Nella scheda " Insieme di dati"clicca verde segno più e seleziona " Aggiungi set di dati - Query":

Invece di scrivere manualmente il testo della richiesta, lo eseguiamo di nuovo costruttore di query:

Sulla "scheda" Tabelle"trascina la tabella" Cibo" dalla prima colonna alla seconda:

Seleziona dalla tabella " Cibo"campi che richiederemo. Per fare ciò, trascina e rilascia i campi" Nome", "Gusto", "Colore" E " Contenuto calorico" dalla seconda colonna alla terza:

È risultato così:

Premi il bottone " OK" - il testo della richiesta è stato generato automaticamente:

Creazione delle impostazioni di presentazione del report

Vai alla scheda " Impostazioni" e clicca su bacchetta magica, chiamare progettista delle impostazioni:

Seleziona il tipo di rapporto " Elenco..." e premere il pulsante " Ulteriore":

Trascina dalla colonna di sinistra a destra i campi che verranno visualizzati nell'elenco e clicca su " Ulteriore":

Trascina dalla colonna di sinistra al campo di destra " Colore" - succederà raggruppamento righe del rapporto. Fare clic su " OK":

Ed ecco il risultato del lavoro del designer. Gerarchia del nostro rapporto:

  • il rapporto nel suo complesso
  • raggruppamento "Colore"
  • voci dettagliate: righe con nomi di alimenti

Salvare il report (pulsante dischetto) E senza chiudere Apriremo immediatamente il configuratore in modalità utente. È risultato così:

Modifica dell'ordine delle colonne

Ma andiamo cambiamo l'ordine colonne (frecce su e giù) in modo che assomigli alla figura seguente:

Salviamo il report e apriamolo nuovamente in modalità utente:

Ottimo, così va molto meglio.

Riassumiamo il contenuto calorico

Sarebbe bello riassumere il contenuto calorico degli alimenti per gruppo. Per vedere la somma del contenuto calorico di tutti i prodotti, ad esempio bianco o giallo. Oppure scopri il contenuto calorico totale di tutti i prodotti nel database.

A questo scopo esiste un meccanismo per il calcolo delle risorse.

Vai alla scheda " Risorse"e trascina il campo" Contenuto calorico"(lo riassumeremo) dalla colonna di sinistra a destra.

In questo caso selezionare nel campo l'espressione dall'elenco a discesa " Quantità (calorie)", poiché il totale sarà la somma di tutti gli elementi inclusi nel totale:

Salviamo e generiamo un report:

Ora disponiamo dei risultati per ciascuno dei gruppi e per il rapporto nel suo complesso.

Riassumiamolo (nella media) in termini di calorie

Ora facciamolo apparire in un'altra colonna media contenuto calorico dei prodotti per gruppi e nel rapporto nel suo complesso.

Non puoi toccare la colonna "Calorie" esistente: il totale è già visualizzato al suo interno, quindi creiamo un altro campo, che sarà una copia esatta del campo "Calorie".

Per creare un campo così “virtuale”, utilizzeremo il meccanismo campi calcolati.

Vai alla scheda " Campi calcolati" e premere verde segno più:

In una colonna " Percorso dati"scriviamo il nome del nuovo campo ( senza soluzione di continuità, senza spazi). Lasciamo che si chiami " Contenuto calorico medio", e nella colonna " Espressione"scriviamo il nome di un campo esistente in base al quale verrà calcolato il nuovo campo. Scriviamo lì " Contenuto calorico". Colonna" Intestazione" verrà compilato automaticamente.

Abbiamo aggiunto un nuovo campo (" Contenuto calorico medio"), ma non apparirà da solo nel rapporto: dovrai chiamare di nuovo progettista delle impostazioni("bacchetta magica") o aggiungi questo campo manualmente.

Facciamolo secondo modo. Per fare ciò, vai alla scheda " Impostazioni", Selezionare " Rapporto"(dopo tutto, vogliamo aggiungere il campo nel suo complesso al report), seleziona la scheda in basso" Campi selezionati"e trascina il campo" Contenuto calorico medio"dalla colonna di sinistra a destra:

È risultato così:

Salviamo e generiamo un report:

È apparso il campo e vediamo che i suoi valori sono i valori del campo "Calorie". Grande!

Per fare ciò, utilizzeremo nuovamente il meccanismo a noi già familiare risorse(riassumendo). Vai alla scheda " Risorse"e trascina il campo" Contenuto calorico medio"dalla colonna di sinistra a destra:

Inoltre, nella colonna " Espressione"scegliere" Media (calorie medie)":

Salviamo e generiamo un report:

Vediamo che per i gruppi, cioè per ciascun colore, e per il rapporto nel suo insieme, il valore medio è stato calcolato in modo assolutamente corretto. Ma sono presenti voci aggiuntive per i singoli prodotti (non i gruppi) che desidero rimuovere dal report.

Sai perché sono comparsi (valori non per gruppo)? Perché quando abbiamo aggiunto il campo " Contenuto calorico medio"nelle impostazioni del report, nel secondo passaggio abbiamo selezionato l'intero rapporto e questo nuovo campo è finito nell'elemento " Dettagliato record".

Correggiamo l'errore. Per fare ciò, torna alla scheda " Impostazioni", Selezionare " Voci dettagliate" prima dall'alto (passaggio 2) e poi " Voci dettagliate"dal basso (passaggio 3), vai al segnalibro" Selezionato campi" e vedremo nella sua colonna di destra l'elemento " Auto".

Elemento " Auto" - questo non è un campo. Si tratta di diversi campi che rientrano qui automaticamente in base alle impostazioni di livello superiore.

Per vedere quali sono questi campi cliccare sull'elemento " Auto" Giusto pulsante e seleziona " Espandere":

Elemento " Auto" ampliato nei seguenti campi:

Ed ecco il nostro campo" Contenuto calorico medio"che è venuto qui dal punto" Rapporto" quando lo abbiamo trascinato lì. Solo rimuoviamo seleziona la casella accanto a questo campo per rimuoverne l'output.

L'uso corretto di uno schema di composizione dei dati (DCS) consente di:

  • ridurre significativamente il tempo necessario per sviluppare un report;
  • eliminare la necessità di creare un gestore di moduli gestiti;
  • ottenere un bellissimo risultato con possibilità di ulteriore personalizzazione da parte dell'utente.

Ma non tutti gli sviluppatori sfruttano al massimo le capacità dello schema, poiché non tutte le sue impostazioni sono ovvie e intuitive. In particolare, molte persone sanno che in 1C SKD ci sono campi calcolati, tuttavia, non comprendono appieno la portata del loro utilizzo e i metodi per lavorare con essi.

Che cos'è un campo calcolato

Nella maggior parte dei casi, l'origine dati nel diagramma di layout è una query. In linea di principio, all'interno della query stessa è già possibile utilizzare diverse formule, costruzioni ed espressioni. Sorge spontanea una domanda: perché abbiamo bisogno di funzionalità duplicate?

Il fatto è che il sistema di controllo degli accessi è qualcosa di più della semplice visualizzazione del risultato di una query, e questo è chiaramente visibile dal modulo di creazione del diagramma (Fig. 1).

I campi calcolati consentono di eseguire determinate azioni con il set di dati generato:

  • Emette una serie di dati ricevuti da una richiesta in una cella specifica, combinando più righe in una;
  • Accedere alle funzioni di esportazione del modulo generale;
  • Esegui le varie espressioni disponibili per il linguaggio di layout e utilizza le funzioni speciali EvaluateExpression.

Esaminiamo questo elenco.

Matrice di valori in una cella

Simuliamo una situazione in cui è necessario ricevere tutti i numeri dei documenti di ricevuta per una controparte in una cella separata:


Pertanto, abbiamo creato un campo di calcolo aggiuntivo nel nostro schema;


Come puoi vedere dall'esempio sopra, non ci sono difficoltà nell'aggiungere ed elaborare i campi calcolati. Abbiamo utilizzato due funzioni: Array() e ConnectRows().

Qualche parola su quest'ultimo. Oltre al primo parametro che indica l'identificatore dell'array, valori o valore, è possibile impostarne altri due:

  1. Separatore elemento – indica quale carattere separerà un elemento di un array o una riga di una tabella di valori da un altro (nel nostro caso abbiamo omesso questo parametro ed è stata assegnata per impostazione predefinita un'interruzione di riga);
  2. Separatore di colonna – un carattere utilizzato per separare le colonne di una tabella di valori (il punto e virgola viene utilizzato per impostazione predefinita).

Accesso alle funzioni di esportazione di un modulo comune

Le funzioni di un modulo comune possono fungere da origine dati per compilare un campo calcolato.

Alcuni punti importanti:

  • La funzione deve essere esportabile;
  • Se una funzione si trova in un modulo comune con l'attributo “Globale” impostato, viene chiamata direttamente per nome, altrimenti la funzione deve essere chiamata secondo lo schema “Nome modulo condiviso”. "Nome della funzione da chiamare."

Come esempio di utilizzo, prenderemo la stessa richiesta di documenti di ricevuta e la visualizzeremo in una colonna separata. Non descriveremo la richiesta in sé, passiamo direttamente ai campi calcolati:


Pertanto, vediamo che quasi tutti i processori di dati possono essere inizializzati dal sistema di controllo degli accessi, il che amplia significativamente le possibilità di utilizzo dello schema.

Espressioni del linguaggio di layout

Molto spesso nel lavoro di uno sviluppatore si verifica una situazione in cui è necessario visualizzare il risultato della divisione nel campo ACS:

  1. Calcolare il costo medio dell'articolo;
  2. Tutti i tipi di interesse;
  3. Calcoli dei guadagni medi, ecc.

Per evitare problemi, in questi casi è consigliabile inserire nel campo calcolato un test di divisione per 0.

Questo può essere fatto utilizzando la costruzione “Scegli Quando….Allora… Altrimenti… Fine”.

Alla fine, qualche parola sulla nuova funzione CalculateExpression(). Con il suo aiuto, in particolare, puoi calcolare le deviazioni di costo tra la riga corrente e quella precedente, il saldo cumulativo, ecc.

Diciamo che puoi ottenere la Somma documento dalla riga precedente della nostra richiesta specificando il valore Calcola espressione ("Somma documento", "Somma precedente") nel campo "Espressione".

1. Calcola (Valutazione)- ha lo scopo di valutare un'espressione nel contesto di qualche raggruppamento. La funzione viene utilizzata per compatibilità con le versioni precedenti della piattaforma. Si consiglia invece di utilizzare la funzione CalculateExpression.

Sintassi:
Calcola(Espressione, Raggruppamento, Tipo di calcolo)

Opzioni :

  • Espressione(Linea). Contiene un'espressione calcolata;
  • Raggruppamento(Linea). Contiene il nome del raggruppamento nel contesto del quale l'espressione deve essere valutata. Se come nome del raggruppamento viene utilizzata una stringa vuota, il calcolo verrà eseguito nel contesto del raggruppamento corrente. Se come nome del gruppo viene utilizzata la stringa GrandTotal, il calcolo verrà eseguito nel contesto del totale generale. In caso contrario, il calcolo verrà eseguito nel contesto del raggruppamento principale con lo stesso nome.
    Per esempio:
    Sum(Sales.SumTurnover) / Calculate("Sum(Sales.SumTurnover)", "Total").
    In questo esempio, il risultato sarà il rapporto tra l'importo del campo "Sales.AmountTurnover" del record di raggruppamento e l'importo dello stesso campo nell'intero layout.
  • Tipo di calcolo(Linea). Se questo parametro è impostato su "TotalTotal", l'espressione verrà calcolata per tutti i record di raggruppamento. Se il valore del parametro è "Raggruppamento", i valori verranno calcolati per il record del gruppo di raggruppamento corrente.
2. Valutare l'espressione (EvalExpression) - ha lo scopo di valutare un'espressione nel contesto di qualche raggruppamento. La funzione tiene conto della selezione dei raggruppamenti, ma non tiene conto delle selezioni gerarchiche. La funzione non può essere applicata a un raggruppamento nella selezione del gruppo di quel raggruppamento.

Sintassi:
CalculateExpression (espressione, raggruppamento, tipo di calcolo, inizio, fine, ordinamento, ordinamento gerarchico, elaborazione valori ordine identici)

Opzioni :

  • Espressione(Linea). Contiene un'espressione calcolata;
  • Raggruppamento(Linea). Contiene il nome del raggruppamento nel contesto del quale l'espressione deve essere valutata. Se come nome del raggruppamento viene utilizzata una stringa vuota, il calcolo verrà eseguito nel contesto del raggruppamento corrente. Se come nome del gruppo viene utilizzata la stringa GrandTotal, il calcolo verrà eseguito nel contesto del totale generale. In caso contrario, il calcolo verrà eseguito nel contesto del raggruppamento principale con quel nome;
  • Tipo di calcolo(Linea). Se questo parametro è impostato su "TotalTotal", l'espressione verrà calcolata per tutti i record di raggruppamento. Se il valore del parametro è "Raggruppamento", i valori verranno calcolati per il record del gruppo di raggruppamento corrente. Se il parametro è impostato su "Raggruppamento non di risorse", quando si calcola la funzione per un record di gruppo per risorsa, l'espressione verrà valutata per il primo record di gruppo del raggruppamento originale. Quando si valuta la funzione CalculateExpression con il valore "GroupingNonResource" per i record di gruppo che non sono raggruppamenti per risorsa, la funzione viene valutata nello stesso modo in cui verrebbe valutata con il valore del parametro "Grouping". Il generatore di layout di composizione dati, quando genera un layout di composizione dati durante l'output di un campo, una risorsa in base alla quale viene eseguito il raggruppamento, nel layout, restituisce al layout un'espressione calcolata utilizzando la funzione CalculateExpression con il parametro "GroupingNon-Resource" specificato. Per le altre risorse raggruppate per risorsa, vengono restituite le normali espressioni di risorsa. Se il parametro è impostato su "Gerarchia", l'espressione deve essere valutata per il record gerarchico principale, se presente, e per l'intero raggruppamento, se non esiste un record gerarchico principale. Il generatore di layout, quando genera un'espressione per il campo % nel gruppo gerarchia, genera un'espressione contenente la relazione dell'espressione della risorsa con la funzione CalculateExpression per l'espressione della risorsa calcolata per il raggruppamento corrente con tipo di calcolo Hierarchy.
  • Inizio. Indica da quale record deve iniziare il frammento, in quali funzioni di espressione aggregata devono essere calcolate e da quale record ottenere valori di campo al di fuori delle funzioni aggregate. Una stringa contenente uno tra:
    • "Primo" È necessario ottenere il primo record di raggruppamento. Dopo la parola tra parentesi è possibile specificare un'espressione, il cui risultato verrà utilizzato come offset dall'inizio del raggruppamento. Il valore risultante deve essere un numero intero maggiore di zero. Ad esempio, Primo(3) – ricezione del terzo record dall'inizio del raggruppamento. Se il primo record è esterno al raggruppamento, si considera che non vi siano record. Ad esempio, se sono presenti 3 record e si desidera ottenere First(4), si considera che non siano presenti record.
    • "Scorso" È necessario ottenere l'ultimo record di raggruppamento. Dopo la parola tra parentesi è possibile specificare un'espressione, il cui risultato verrà utilizzato come offset dalla fine del raggruppamento. Il valore risultante deve essere un numero intero maggiore di zero. Ad esempio, Ultimo(3) – ricezione del terzo record dalla fine del gruppo. Se l'ultimo record è esterno al raggruppamento, si considera che non vi siano record. Ad esempio, se sono presenti 3 record e si desidera ottenere Last(4), si considera che non siano presenti record.
    • "Precedente" È necessario ottenere il record di raggruppamento precedente. Dopo la parola tra parentesi è possibile specificare un'espressione, il cui risultato verrà utilizzato come scostamento rispetto al record di raggruppamento corrente. Ad esempio, Precedente(2) – ottiene il precedente dal record precedente. Se il record precedente è esterno al raggruppamento (ad esempio, il secondo record di raggruppamento richiede di ottenere Precedente(3)), viene ottenuto il primo record di raggruppamento. Quando si riceve il record precedente per il totale del raggruppamento, si ottiene il primo record.
    • "Prossimo" È necessario ottenere il record di raggruppamento successivo. Dopo la parola tra parentesi è possibile specificare un'espressione, il cui risultato verrà utilizzato come spostamento in avanti rispetto alla voce di raggruppamento corrente. Ad esempio, Next(2) – ottiene il successivo dal record successivo. Se il record successivo va oltre il raggruppamento, si considera che non ci siano record. Ad esempio, se sono presenti 3 voci e la terza voce riceve Successivo, si considera che non vi siano voci. Quando viene ricevuto il record successivo per il totale del raggruppamento, si considera che non vi sia alcun record.
    • "Attuale". È necessario ottenere il record corrente. Quando si recupera un totale di raggruppamento, si ottiene il primo record.
    • "Valore limite". La necessità di ottenere un record in base al valore specificato. Dopo la parola LimitingValue tra parentesi, è necessario indicare l'espressione con il valore con cui si vuole che inizi il frammento, il primo campo di ordinamento. Il primo record il cui valore del campo di ordinamento è maggiore o uguale al valore specificato verrà restituito come record. Ad esempio, se il campo Periodo viene utilizzato come campo di ordinamento e contiene i valori 01/01/2010, 01/02/2010, 01/03/2010 e desideri ottenere LimitingValue(DateTime(2010 , 1, 15)), si otterrà quindi un record con la data 02/01 2010.
  • FINE. Indica in quale record deve essere continuato il frammento e in quale deve essere calcolata l'espressione aggregata. Una stringa contenente uno tra:
    • "Primo"
    • "Scorso"
    • "Precedente"
    • "Prossimo"
    • "Attuale".
    • "Valore limite".
  • Ordinamento. Una stringa che elenca le espressioni, separate da virgole, nella direzione in cui deve essere ordinata la sequenza. Se non specificato, l'ordinamento viene eseguito allo stesso modo del raggruppamento per il quale viene valutata l'espressione. Dopo ciascuna espressione, è possibile specificare la parola chiave Ascending, per ordinare in ordine crescente, Descending, per ordinare in ordine decrescente, Auto-Ordering, per ordinare i campi di riferimento in base ai campi in base ai quali si desidera ordinare l'oggetto a cui si fa riferimento. La parola Ordine automatico può essere utilizzata sia con la parola Ascendente che con la parola Discendente.
  • Ordinamento gerarchico. Simile all'ordinamento. Utilizzato per organizzare i record gerarchici. Se non specificato, il compositore del layout genera l'ordinamento in base all'ordinamento specificato nel parametro Sort.
  • Elaborazione degli stessi valori dell'ordine. Una stringa contenente uno tra:
    • "Insieme" significa che viene utilizzata una sequenza di record ordinati per determinare i record precedenti e successivi;
    • "Separatamente" significa che i record precedente e successivo sono determinati in base ai valori delle espressioni di ordinamento;
    Ad esempio, se la sequenza risultante è ordinata per data:
    1. 01 gennaio 2001 Ivanov M. 10
    2. 02 gennaio 2001 Petrov S. 20
    3. 02 gennaio 2001 Sidorov R. 30
    4. 03 gennaio 2001 Petrov S. 40
    Quando si utilizza l'elaborazione di valori identici dell'ordine "Separatamente", quello precedente per il record 3 sarà il record 2 e quando si utilizza "Insieme" - il record 1. E il frammento per il record corrente per il record 2 per "Separatamente" sarà il record 2 e per "Insieme" - i record 2 e 3. Pertanto, il totale per il record corrente per "Separatamente" sarà 20 e per "Insieme" - 50. Quando "Insieme" è specificato in Inizio e Parametri finali, non è possibile specificare un offset per le posizioni "Primo", "Ultimo", "Precedente", "Successivo". Il valore predefinito è "Separato".
Esempio:
Ottenere il rapporto tra l'importo del campo "Sales.AmountTurnover" di un record di raggruppamento e l'importo dello stesso campo nell'intero layout:
Sum(Sales.SumTurnover) / CalculateExpression("Sum(Sales.SumTurnover)", "Total").

Questo esempio calcola il valore della gerarchia corrente:
Scelta
Quando Livello() > 0
Quindi EvaluateExpression("Riferimento", "Gerarchia")
Altrimenti Nullo
FINE

Appunti:
La funzione tiene conto della selezione dei raggruppamenti, ma non tiene conto delle selezioni gerarchiche. La funzione non può essere applicata a un raggruppamento nella selezione del gruppo di quel raggruppamento. Ad esempio, quando si seleziona il raggruppamento Nomenclatura, non è possibile utilizzare l'espressione CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000 . Ma tale espressione può essere utilizzata nella selezione gerarchica. Se il record finale precede il record iniziale, si considera che non vi siano record per il calcolo dei dati dettagliati e per il calcolo delle funzioni aggregate. Quando si calcolano le espressioni di intervallo per un totale generale (il parametro Raggruppamento è impostato su "GrossTotal"), si presuppone che non vi siano record per il calcolo dei dati dettagliati e il calcolo delle funzioni aggregate. Quando si genera un'espressione per la funzione CalculateExpression, il compositore di layout, se l'espressione di ordinamento contiene campi che non possono essere utilizzati nel raggruppamento, sostituisce la funzione CalculateExpression con NULL.

3. Valuta l'espressione con l'array di gruppo (EvalExpression With Group Array) - la funzione restituisce un array, ciascun elemento del quale contiene il risultato del calcolo di un'espressione per il raggruppamento in base al campo specificato.

Sintassi:
CalculateExpressionWithGroupArray (Espressione, GroupFieldExpressions, SelectRecords, SelectGroups)

Opzioni :

  • Espressione(Stringa) - l'espressione da valutare. Ad esempio, "Importo(ImportoFatturato)";
  • GruppiEspressioniCampo
  • Selezione dei record
  • Selezione dei raggruppamenti- selezione applicata ai record di gruppo. Ad esempio: "Importo(ImportoFatturato) > &Parametro1".
Esempio:
Massimo(CalculateExpressionWithGroupArray("Importo(ImportoFatturato)", "Controparte"));


Il generatore di layout, quando genera espressioni per la visualizzazione di un campo personalizzato la cui espressione contiene solo la funzione CalculateArrayWithGroup, genera l'espressione di visualizzazione in modo che i dati visualizzati dalle visualizzazioni e dai dati siano ordinati.
Ad esempio, per un campo personalizzato con l'espressione:
CalculateExpressionWithGroupArray("Importo(Importo Fatturato)", "Controparte")
Il generatore di layout genererà la seguente espressione per l'output:
ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)), Amount(DataSet.AmountTurnover)", "DataSet.Account"), "2")))

4. Calcola l'espressione con GroupValueTable (EvalExpressionWithGroupValueTable) - la funzione restituisce una tabella di valori, ciascun elemento della quale contiene il risultato del calcolo di un'espressione per il raggruppamento in base al campo specificato.

Sintassi:
CalculateExpressionWithGroupValueTable (espressione, espressioni campo gruppo, selezione record, selezione gruppo)

Opzioni :

  • Espressione(Stringa) - l'espressione da valutare. Una riga può contenere più espressioni separate da virgole. Dopo ogni espressione può esserci una parola chiave opzionale AS e il nome della colonna della tabella dei valori. Ad esempio: "Controparte, Importo (Importo Fatturato) come volume delle vendite".
  • GruppiEspressioniCampo- espressioni di raggruppamento di campi, separati da virgole. Ad esempio, "Controparte, Partito";
  • Selezione dei record- un'espressione applicata alle registrazioni di dettaglio. Ad esempio, "Flag di eliminazione = False". Se questo parametro utilizza una funzione aggregata, si verificherà un errore durante la composizione dei dati;
  • Selezione dei raggruppamenti- selezione applicata ai record di gruppo. Ad esempio: "Importo(ImportoFatturato) > &Parametro1".
Esempio:
Calcola l'espressione con la tabella di raggruppamento dei valori ("Conto AS Controparte, Importo (Importo Fatturato) AS Volume delle vendite", "Conto")

Il risultato di questa funzione sarà una tabella di valori con le colonne Controparte e Volume delle vendite, che conterrà le controparti con i relativi volumi di vendita.
Il compositore di layout, quando genera un layout, converte i parametri della funzione in termini di campi del layout di composizione dei dati. Ad esempio, il campo Account verrà convertito in DataSet.Account.
Ad esempio, un campo personalizzato con l'espressione:
CalculateExpressionWithGroupValueTable("Conto, Importo(ImportoFatturato)", "Conto")
Il generatore di layout genererà la seguente espressione per l'output:
ConnectRows(GetPart(Order(CalculateExpressionWithGroupValueTable("DataSet.Account, DataSet.AccountRepresentation, Sum(DataSet.AmountTurnover), View(DataSet.AmountTurnover), DataSet.OrderingField","DataSet.Account"), "5, 1, 3" ), "2, 4"))

5. Livello - la funzione è progettata per ottenere il livello di registrazione corrente.

Sintassi:
Livello()

Esempio:
Livello()

6. Numero sequenza - ottieni il numero di serie successivo.

Sintassi:
NumeroPerOrdine()

Esempio:
NumeroPerOrdine()

7. SequenzaNumeroInRaggruppamento - restituisce il numero di sequenza successivo nel raggruppamento corrente.

Esempio:
NumeroPerOrdineInGruppo()

8. Formato - ottieni una stringa formattata del valore passato.

Sintassi:
Formato(Valore, StringaFormato)

Opzioni :

  • Senso- l'espressione da formattare;
  • FormatString- la stringa di formato è impostata in conformità con la stringa di formato 1C:Enterprise.
Esempio:
Formato(Fatture consumabili.Importo documento, "VAN=2")

9. Inizio del periodo

Sintassi:
PeriodoInizio(Data, TipoPeriodo)

Opzioni :

  • data(Data di). Data specificata;
  • Tipo di periodo
Esempio:
PeriodoInizio(DataOra(2002, 10, 12, 10, 15, 34), "Mese")
Risultato: 01/10/2002 0:00:00

10. Fine del periodo - la funzione è progettata per selezionare una data specifica da una determinata data.

Sintassi:
FinePeriodo(Data, TipoPeriodo)

Opzioni :

  • data(Data di). Data specificata;
  • Tipo di periodo(Linea). Contiene uno dei valori seguenti: Minuto; Ora; Giorno; Una settimana; Mese; Trimestre; Anno; Decennio; Metà anno.
Esempio:
FinePeriodo(DataOra(2002, 10, 12, 10, 15, 34), "Settimana")
Risultato: 13/10/2002 23:59:59

11. AggiungiKData (DataAggiungi) - la funzione è progettata per aggiungere un certo valore alla data.

Sintassi:
AddToDate (espressione, tipo di incremento, grandezza)

Opzioni :

  • Espressione(Data di). Data originale;
  • TipoIngrandimento(Linea). Contiene uno dei valori seguenti: Minuto; Ora; Giorno; Una settimana; Mese; Trimestre; Anno; Decennio; Metà anno.
  • Grandezza(Numero). Di quanto è necessario aumentare la data, la parte frazionaria viene ignorata.
Esempio:
AggiungiAData(DataOra(2002, 10, 12, 10, 15, 34), "Mese", 1)
Risultato: 12/11/2002 10:15:34

12. Differenza di data - la funzione è progettata per ottenere la differenza tra due date.

Sintassi:
DataDifferenza(Espressione1, Espressione2, TipoDifferenza)

Opzioni :

  • Espressione1(Data di). Data sottratta;
  • Espressione2(Data di). Data originale;
  • Differenza di tipo(Linea). Contiene uno dei valori: Secondo; Minuto; Ora; Giorno; Mese; Trimestre; Anno.
Esempio:
DIFFERENZADATA(DATAORA(2002, 10, 12, 10, 15, 34),
DATAORA(2002, 10, 14, 9, 18, 06), "GIORNO")
Risultato: 2

13. Sottostringa - questa funzione è progettata per estrarre una sottostringa da una stringa.

Sintassi:
Sottostringa (stringa, posizione, lunghezza)

Opzioni :

  • Linea(Linea). La stringa da cui viene estratta la sottostringa;
  • Posizione(Numero). La posizione del carattere da cui inizia la sottostringa da estrarre dalla stringa;
  • Lunghezza(Numero). Lunghezza della sottostringa allocata.
Esempio:
SUBSTRING(Account.Indirizzo, 1, 4)

14. Lunghezza della corda - la funzione è progettata per determinare la lunghezza di una stringa.

Sintassi:
StringLength(Stringa)

Parametro:

  • Linea(Linea). Una stringa la cui lunghezza è specificata.
Esempio:
Linea(Controparti.Indirizzo)

15. Anno- questa funzione è progettata per estrarre l'anno da un valore di tipo Data.

Sintassi:
Anno(Data)

Parametro:

  • data(Data di). La data entro la quale viene determinato l'anno.
Esempio:
ANNO(Data.Spesa)

16. Quarto - questa funzione è progettata per estrarre il numero del trimestre da un valore di tipo Data. Il numero del quarto normalmente varia da 1 a 4.

Sintassi:
Trimestre(Data)

Parametro:

  • data(Data di). La data entro la quale viene determinato il trimestre
Esempio:
TRIMESTRE(Data.Spesa)

17. Mese - questa funzione è progettata per estrarre il numero del mese da un valore di tipo Data. Il numero del mese normalmente varia da 1 a 12.

Sintassi:
Mese(Data)

Parametro:

  • data(Data di). La data entro la quale viene determinato il mese.
Esempio:
MESE(Data.Spesa)

18. Giorno dell'anno (DayOfYear) - questa funzione è progettata per ottenere il giorno dell'anno da un valore di tipo Data. Il giorno dell'anno varia normalmente da 1 a 365 (366).

Sintassi:
Giorno dell'anno(Data)

Parametro:

  • data(Data di). La data entro la quale viene determinato il giorno dell'anno.
Esempio:
GIORNOANNO(ContoSpese.Data)

19. Giorno- questa funzione è progettata per ottenere il giorno del mese da un valore di tipo Data. Il giorno del mese normalmente varia da 1 a 31.

Sintassi:
Giorno(Data)

Parametro:

  • data(Data di). La data entro la quale viene determinato il giorno del mese.
Esempio:
GIORNO(Data.Spesa)

20. Settimana - questa funzione è progettata per ottenere il numero della settimana dell'anno da un valore di tipo Data. Le settimane dell'anno sono numerate a partire da 1.

Sintassi:
Settimana(Data)

Parametro:

  • data(Data di). La data in base alla quale vengono determinati i numeri delle settimane.
Esempio:
SETTIMANA(Data.Spesa)

21. Giorno feriale - questa funzione è progettata per ottenere il giorno della settimana da un valore di tipo Data. Il giorno normale della settimana varia da 1 (lunedì) a 7 (domenica).

Sintassi:
Giorno della settimana(Data)

Parametro:

  • data(Data di). La data in base alla quale viene determinato il giorno della settimana.
Esempio:
GIORNO DELLA SETTIMANA (Data fattura spese)

22. Ora- questa funzione è progettata per ottenere l'ora del giorno da un valore di tipo Data. L'ora del giorno va dalle 0 alle 23.

Sintassi:
Ora (data)

Parametro:

  • data(Data di). La data in base alla quale viene determinata l'ora del giorno.
Esempio:
ORA(Data.Spesa)

23. Minuto - questa funzione serve per ricavare i minuti dell'ora da un valore di tipo Data. I minuti dell'ora vanno da 0 a 59.

Sintassi:
Minuto (data)

Parametro:

  • data(Data di). La data entro la quale viene determinato il minuto dell'ora.
Esempio:
MINUTO(Data.Spesa)

24. Secondo - questa funzione è progettata per ottenere i secondi di un minuto da un valore di tipo Data. I secondi di minuto vanno da 0 a 59.

Sintassi:
Secondo(Data)

Parametro:

  • data(Data di). La data entro la quale vengono determinati i secondi del minuto.
Esempio:
SECONDO(Data.Spesa)

25. Cast - questa funzione è progettata per estrarre un tipo da un'espressione che può contenere un tipo composto. Se l'espressione contiene un tipo diverso da quello richiesto, verrà restituito NULL.

Sintassi:
Express(Espressione, TipoIndicazione)

Opzioni :

  • Espressione- espressione da convertire;
  • Indicazione del tipo(Linea). Contiene una stringa di tipo. Ad esempio, "Numero", "Stringa", ecc. Oltre ai tipi primitivi, questa riga può contenere il nome della tabella. In questo caso si tenterà di esprimere un riferimento alla tabella specificata.
Esempio:
Espresso(Data.Props1, "Numero(10,3)")

26. ÈNullo (ÈNullo) - questa funzione restituisce il valore del secondo parametro se il valore del primo parametro è NULL. Altrimenti verrà restituito il valore del primo parametro.

Sintassi:
ÈNullo(Espressione1, Espressione2)

Opzioni :

  • Espressione1- valore da verificare;
  • Espressione2- restituisce il valore se Expression1 è NULL.
Esempio:
SìNULL(Importo(Vendite.ImportoFatturato), 0)

27.ACos- calcola l'arcocoseno in radianti.

Sintassi:
ACos(Espressione)

Parametro:

  • Espressione(Numero). Il valore del coseno (nell'intervallo -1 ... 1) in base al quale viene determinato l'angolo.
28.ASin- calcola l'arcoseno in radianti.

Sintassi:
ASin(Espressione)

Parametro:

  • Espressione(Numero). Il valore del seno (nell'intervallo -1 ... 1) in base al quale viene determinato l'angolo.
29. ATan- calcola l'arcotangente in radianti.

Sintassi:
ATan(Espressione)

Parametro:

  • Espressione(Numero). Il valore della tangente in base al quale viene determinato l'angolo.
30.Cos- calcola il coseno.

Sintassi:
Cos(Espressione)

Parametro:

  • Espressione
31. Esp- elevare il numero e a una potenza.

Sintassi:
Esp(Espressione)

Parametro:

  • Espressione(Numero). Il significato della laurea.
32.Registro- calcola il logaritmo naturale.

Sintassi:
Log(Espressione)

Parametro:

  • Espressione
33.Log10- calcola il logaritmo di X in base 10.

Sintassi:
Log10(Espressione)

Parametro:

  • Espressione(Numero). Il numero originale è maggiore di 0.
34. Pot- esponenziazione.

Sintassi:
Pow(Base, Indicatore)

Opzioni :

  • Base(Numero). La base dell'operazione di esponenziazione.
  • Indice(Numero). Esponente.
35. Peccato- calcola il seno.

Sintassi:
Peccato(Espressione)

Parametro:

  • Espressione(Numero). Specificato in radianti.
36. Sqrt- calcola la radice quadrata.

Sintassi:
Sqrt(Espressione)

Parametro:

  • Espressione(Numero). Numero non negativo.
37. Abbronzatura- calcola la tangente.

Sintassi:
Abbronzatura(Espressione)

Parametro:

  • Espressione(Numero). Il valore del seno in base al quale viene determinato l'angolo.
38. Rotondo- arrotonda il numero originale alla profondità di bit richiesta. La modalità di arrotondamento è standard (1,5 come 2).

Sintassi:
Env(Espressione, Profondità di bit)

Opzioni :

  • Espressione(Numero). Numero originale;
  • Profondità di bit(Numero). Il numero di cifre decimali a cui arrotondare.
39. Int- taglia la parte frazionaria di un numero.

Sintassi:
Oggetto(Espressione)

Parametro:

  • Espressione(Numero). Un numero frazionario.
40. Funzioni dei moduli comuni

Un'espressione del motore di composizione dati può contenere chiamate a funzioni di moduli di configurazione comuni globali. Non è richiesta alcuna sintassi aggiuntiva per chiamare tali funzioni.

Esempio:
Nome abbreviato(Documenti.Link, Documenti.Data, Documenti.Numero)

In questo esempio la funzione "AbbreviatedName" verrà richiamata dal modulo di configurazione generale.
Si noti che l'uso delle funzioni comuni del modulo è consentito solo se viene specificato il parametro appropriato del processore di composizione dati.
Inoltre, le funzioni dei moduli comuni non possono essere utilizzate nelle espressioni di campi personalizzati.

41. Risentimento - questa funzione restituisce una rappresentazione di stringa del valore passato di tipo non primitivo. Per valori di tipo primitivo, restituisce il valore stesso.

<Пустое значение>".

Esempio:
Presentazione(Controparte)

42. Corda - questa funzione converte il valore passato in una stringa.

Se come parametro viene utilizzato un array o una tabella di valori, la funzione restituisce una stringa contenente una rappresentazione in formato stringa di tutti gli elementi dell'array, separati dai caratteri ";". Se un elemento qualsiasi ha una rappresentazione di stringa vuota, la stringa "<Пустое значение>".

Esempio:
Riga(datavendita)

43. Il valore è riempito

Per valori NULL, Non definito restituisce sempre False.
Per i valori booleani, restituisce sempre True.
Per gli altri tipi, restituisce True se il valore è diverso dal valore predefinito per il tipo specificato.

Esempio:
Valore riempito (data di consegna)

44. Livello nel gruppo - questa funzione ottiene il livello di registrazione corrente relativo al raggruppamento.

Può essere utilizzato per ottenere il livello di nidificazione di un record in un raggruppamento gerarchico.

Esempio:
Livellonelgruppo()

45. TipoValore

Sintassi:
TipoValore(Espressione)

Parametro:

  • Espressione(Linea). Tipo di valore stringa.
Restituisce un valore di tipo Type contenente il tipo di valore del parametro della funzione.